1

在具有文件对象的编程语言中,您宁愿将此对象传递给函数还是将物理文件的路径传递给函数并让函数自己打开文件?

如果语言对您的回答很重要,请考虑 c++ 和 python。

谢谢,

某人

4

3 回答 3

3

我对良好编码实践的理解是打开要使用信息的文件,而不是在任何语言的更全局范围内。

于 2012-07-25T12:33:11.947 回答
2

我完全支持强类型,因此尽可能多地传递文件路径对象是有意义的。Boostboost::filesystem::path为此目的提供了该类。

但是,这应该是无忧无虑的。例如,提供从stringto的隐式转换fileobject(但不是反过来!)可能没有什么害处,因此接受前者的函数也将接受路径作为裸字符串(并用它做正确的事情)。

同样,Python 中的某些函数需要一个打开的文件对象,但如果您将一个实例传递str给它,它们将通过调用open(path, 'r')自己来构造这样一个对象。

但是,请注意,我在这里区分

  • 表示文件输入/输出流的对象 - ifstream/ofstream在 C++ 中,file在 Python 中(不要传递这个),和
  • 表示文件系统中文件路径对象,例如boost::filesystem::path-传递这个

相比之下,.NET 具有FileInfo用于表示文件系统对象的类,而它使用FileStream该类来表示……嗯,文件

于 2012-07-25T12:34:27.530 回答
0

这在很大程度上取决于具体情况。

如果我要在几个(子)函数中使用该文件,而不是传递初始化的文件对象(或函数)。

如果我有一个函数来获取文件名和路径,而另一个函数来处理文件的数据,我可能更愿意传递路径和文件名并让使用数据的函数打开文件。

于 2012-07-25T12:39:34.357 回答