如何在D中使用公共导入

如何在D中使用公共导入,d,D,我试图在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

我试图在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;
当我尝试在Windows上使用
rdmd moduleExp
从根文件夹编译时,我得到错误:

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然后一切正常。

模块
是一个保留关键字,不应用作模块名称。您正在尝试的是dlang中名为
包模块
的功能。查找文档

因此,基本上,您在文件夹
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

module
是一个保留关键字,您不应将其用作模块名称。您正在尝试的是dlang中名为
包模块
的功能。查找文档

因此,基本上,您在文件夹
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;
...
现在,当您想要导入包时,只需编写
importfoo