如何防止从我的模块导入功能?

时间:2013-10-07 13:55:12

标签: module d

我正在寻找类似private属性的东西,不是使用类成员,而是使用模块实体。函数,类,枚举器等。

例如,在Erlang中有一个export属性,如下所示:-export([fun1, fun2]),意味着只导出模块中所有函数的fun1fun2。在D中,默认情况下似乎都会导出所有内容,这是正常的,但有没有办法防止特定的内容?

1 个答案:

答案 0 :(得分:6)

在导入的模块中,您可以将任何内容标记为私有,以防止其他模块访问它。 private在模块级实体上的工作方式与在类成员上的工作方式相同 - 在模块外部不可访问,可在模块内部使用。但是,目前它仍然是可见,因此它可能会产生愚蠢的错误,例如“来自模块A的私有函数foo与来自模块B的函数foo冲突”,迫使您消除名称的歧义。 (我和其他几个人希望在某些时候改变这一点,因为它显然不应该是一个问题!)

在执行导入的模块中,您不能说“导入所有除外”,但您可以导入特定名称列表而无需导入其他名称:

import std.stdio : File, writefln;

void main() {
File f; // cool
writefln("hello"); // cool
writeln("hey"); // "Error: 'writeln' is not defined" - the selective import didn't pull this name at all
}