如何在D中使用公共进口

qua*_*els 1 d

我试图在D中复制名称空间类型的模式.我希望每个文件有一个类,并且能够使用单个import语句来包含一组文件中的所有类.

在我的根文件夹中我有moduleExp.d

import foo.module;
import std.stdio;

void main()
{
    writeln("hello world");
    auto quakk = new Quakk();
    quakk.write();
}
Run Code Online (Sandbox Code Playgroud)

在我的foo文件夹中,我有module1.d:

module foo.module1;
import std.stdio;

class Quakk
{
    public string name = "thename";
    public void write()
    {
        writeln(this.name);
    }
}
Run Code Online (Sandbox Code Playgroud)

同样在foo文件夹中,我有module.d,我认为我可以使用它来公开导入我的所有类模块,以便它们可以在根文件夹的moduleExp.d中使用.

module foo.module;
public import foo.module1;
Run Code Online (Sandbox Code Playgroud)

当我尝试从根文件夹在Windows上编译时rdmd moduleExp,我收到错误:

moduleExp.d(1): Error: identifier expected following package
moduleExp.d(1): Error: ';' expected
Failed: ["dmd", "-v", "-o-", "moduleExp.d", "-I."]
Run Code Online (Sandbox Code Playgroud)

我不确定我在这里做错了什么.如果我在module.Exp.d中更改第1行,import foo.module1;那么一切正常.

yaz*_*yaz 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;
...
Run Code Online (Sandbox Code Playgroud)

现在当你想要导入包时,只需写import foo.