4

Python 源文件具有很好的特性,即能够使用该模式作为模块或作为独立程序(工具)

if __name__ == "__main__":

是否有可能以某种方式为 D 模块源文件获得相同的行为?

4

3 回答 3

6

(仅限 Unix)

您可以使用设置 aversion启用main功能的 shebang 行:

#!/path/to/rdmd --shebang -version=run
version(run) void main() {}

使您的文件可执行 ( chmod +x foo.d) 并像程序一样运行它 ( ./foo.d)。

一定要使用唯一的版本标识符(不像我在这里做的)。也许以某种形式包含完全限定的模块名称,或者使用 UUID。

于 2013-09-03T20:54:12.083 回答
5

这取决于你想要做什么。AD 程序需要一个main跨所有模块的函数作为入口点,因此没有像 Python 中那样的隐式方式。D 方式是将可执行文件创建为包含 amain并导入另一个模块的单独模块。

但是,如果您只是为了测试目的而这样做,您应该将可执行代码放在unittest块中(没有main),然后您可以使用 运行该文件rdmd -main -unittest scratch.d,这会为您添加一个存根main

如果你真的想制作一个双重用途的模块(这不是真正的 The D Way),你可以把main里面放一个独特的version块:

module scratch; // file scratch.d
import std.stdio;

void foo(){ writeln("FOO"); }

version(scratchExe) {
    void main() {
        foo();
    }
}

然后用 . 编译可执行版本dmd scratch.d -version=scratchExe

于 2013-08-30T21:46:54.920 回答
4

是的,有一个编译指示:

void foo(){
//...
}

version(fooMain){
pragma(startaddress, foo);
}
于 2013-08-31T03:26:58.877 回答