为什么文件和目录没有单独的命名空间?

时间:2009-05-31 08:53:26

标签: oop namespaces theory naming filenames

文件和目录可以具有不同的名称空间,并且仍然可以用于标识特定文件,因为可以通过不同类型的事物来区分具有相同名称的文件和目录。

原始字段和引用字段也可以具有不同的名称空间(在Java中),因为如果基元和引用字段具有相同的名称,则可以通过不同类型的事物来识别它们。

单独的命名空间在其他地方使用。例如,在Java中,您可以使用方法exampleName()和字段exampleName,虽然它们具有相同的名称,但它们通过不同类型的事物来区分。

3 个答案:

答案 0 :(得分:2)

首先,这个问题是针对特定语言的。在纯OOP语言中,原子和复合元素之间没有区别。一切都是对象。由于纯函数式语言中的类似原因,您不能将函数和变量命名为相同。

其次,如果你有多态操作,就没有办法告诉你引用了哪个变量。例如,由于多态操作(例如

),您不能为文件和目录设置不同的命名空间
cp foo bar

cp适用于文件和目录,如果你有不同的命名空间,就没有办法说出你的意思了。

答案 1 :(得分:1)

我不相信这是个好主意。我想这些原因涉及文件系统代码的性能和简单性等问题。如果目录列表必须根据您认为应该具有的不同命名空间的数量而减少2或3个或更多不同的路径,这可能会使代码复杂化。

此外,请考虑可能出现的最终用户混淆。目前,我们通过使用文件扩展名在文件系统中提供了一种命名空间。您可以在同一目录中将file.txt和file.dll以及file.exe都存在。当这些文件同时出现时会发生什么事情 - 这是病毒编写者使用社交工程形式让您点击错误文件的一种方法。想象一下,如果你可以将目录与同名文件混淆起来吗?

答案 2 :(得分:0)

目录和文件不一定如此不同。它们都是其父目录中的条目,只是带有一个标志,用于指示条目是否是目录。您可以打开一个目录并将其读取就像它是一个文件一样,只是可以在其上执行某些其他操作 - 符号链接的工作方式相同。 (这个描述偏向于Unix文件系统视图,但我认为DOS / Windows视图的工作原理大致相同)。在任何目录中,都有一组成员名称,文件系统强制执行唯一性约束,即目录只能有一个具有给定名称的成员。

考虑将Java方法名称与字段名称进行比较---在C语言中,您不能拥有具有相同名称的全局函数和全局变量,因为目标文件中的所有符号都在单个名称空间中。但你可以使用C ++,因为函数“void foo()”被映射到受损的符号名称(“foo__vv”或其他东西)。因此,它们并不是一个单独的命名空间,因为对于字段“foo”与方法“foo()”,命名空间中的键是不同的。鉴于您无法获得关键冲突,它们看起来像是单独的命名空间,但实际上它是如何实现的?

相关问题