如何在D中使用公共导入

时间:2014-06-28 03:59:55

标签: 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.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;,那么一切正常。

1 个答案:

答案 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