1

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

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

4

1 回答 1

6

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

在进行导入的模块中,您不能说“import all except”,但您可以导入特定名称的列表而不导入其他名称:

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
}
于 2013-10-07T14:23:23.173 回答