来自D 语言参考:
模块与源文件一一对应。模块名是去掉了路径和扩展名的文件名。
但是,模块名称仍然在文件中明确指定。
module foo;
这有什么意义?如果模块对应于文件,为什么编译器不能从文件名中推断出它们的名称?
来自D 语言参考:
模块与源文件一一对应。模块名是去掉了路径和扩展名的文件名。
但是,模块名称仍然在文件中明确指定。
module foo;
这有什么意义?如果模块对应于文件,为什么编译器不能从文件名中推断出它们的名称?
同一页有点下(emph mine)
ModuleDeclaration 设置模块的名称和它所属的包。如果不存在,则模块名称被视为与源文件名相同的名称 (去除路径和扩展名)。
这意味着如果你想把一个模块放在一个包中,你必须明确地指定它(就像 Java 的package
声明一样)并且考虑到人们使用奇怪/外国目录名称的奇怪倾向,你不能依赖检查 source/src /导入路径
文件名和模块名不必相同的原因可以是,您可以使用 .di 进行导入,并使用 -c 开关使用实际代码的多个版本来创建 .obj 文件以链接不同版本(虽然摆弄导入路径更方便)
它可以推断出来。您不必提供模块名称。但是,您可以给模块名称,如果您愿意,您可以给它一个完全不同的名称。一个典型的例子是文件名不是有效的模块名(例如 my-module.d)。在这种情况下,您可以使用module
声明给它一个有效的模块名称(例如 my_module)。
将模块名放在文件顶部是常见的做法,通常模块名与文件名相同,但是使模块名与文件名不完全匹配增加了灵活性。
就个人而言,我通常认为将模块命名为文件名以外的任何名称都是一个坏主意,并且我认为如果文件不是有效的模块名,则应该更改文件名,使其成为一个,但显然决定让他们不匹配的额外灵活性是值得的。所以,它是在语言中。