我正在尝试在D中复制名称空间类型的模式。我希望每个文件有一个类,并且能够使用单个import
语句来包含来自一组文件的所有类。
在我的根文件夹中我有moduleExp.d
import foo.module;
import std.stdio;
void main()
{
writeln("hello world");
auto quakk = new Quakk();
quakk.write();
}
在我的foo文件夹中,我有module1.d:
module foo.module1;
import std.stdio;
class Quakk
{
public string name = "thename";
public void write()
{
writeln(this.name);
}
}
同样在foo文件夹中,我有module.d,我认为我可以使用它来公开导入我的所有类模块,以便它们可以在根文件夹的moduleExp.d中使用。
module foo.module;
public import foo.module1;
当我尝试使用rdmd moduleExp
从根文件夹在Windows上编译时,出现错误:
moduleExp.d(1): Error: identifier expected following package
moduleExp.d(1): Error: ';' expected
Failed: ["dmd", "-v", "-o-", "moduleExp.d", "-I."]
我不确定我在这里做错了什么。如果我将module.Exp.d中的第1行更改为import foo.module1;
,那么一切正常。
答案 0 :(得分:6)
module
是保留关键字,不应将其用作模块名称。而你想要做的是作为dlang中的一个名为package modules
的特征存在。查看http://dlang.org/module.html以获取文档。
所以基本上,你在foo
文件夹下有一个模块,它的名字应该是package.d
,你可以公开导入foo中的模块和你想要的任何其他模块。例如:
module foo; // notice the module name is used
// for the package module and not foo.package
public import foo.module1;
public import foo.module2;
...
现在,当您想要导入包时,只需编写import foo
。