模块与源文件一一对应。模块名称是文件名,其路径和扩展名已被删除。
但是,模块名称仍然明确地在文件中指定。
module foo;
这有什么意义?如果模块对应于文件,为什么编译器不能从文件名中推断它们被调用的内容?
答案 0 :(得分:10)
同一页有点下来(我的)
ModuleDeclaration设置模块的名称及其包装 属于。如果不存在,则模块名称将被视为相同的名称 (剥离路径和扩展名)源文件名。
这意味着如果你想将一个模块放在一个包中,你必须明确地指定它(就像Java的package
声明一样)并且考虑到人们使用奇数/外来目录名的奇怪倾向你可以'依赖于检查路径中的source / src / import
文件名和模块名称不必相同的原因可以是这样你可以使用.di进行导入并使用-c开关使用实际代码的几个版本来创建用于链接的.obj文件不同的版本(虽然摆弄导入路径更容易)
答案 1 :(得分:4)
它可以推断它。您没有拥有来提供模块名称。但是,您可以提供模块名称,如果您愿意,可以为其提供完全不同的名称。一个主要的例子是文件名不是有效的模块名称(例如my-module.d)。在这种情况下,您可以使用module
声明为其提供有效的模块名称(例如my_module)。
通常的做法是将模块名称放在文件的顶部,通常模块名称与文件名相同,但可以使模块名称与文件名不完全匹配,从而提高了灵活性。 / p>
就个人而言,我一般认为将模块命名为文件名以外的其他内容是个坏主意,我认为如果文件不是有效的模块名,那么应该更改文件名,以便它是一个,但显然决定了使它们不匹配的额外灵活性值得拥有。所以,它是用语言。