Python 源文件具有很好的特性,即能够使用该模式作为模块或作为独立程序(工具)
if __name__ == "__main__":
是否有可能以某种方式为 D 模块源文件获得相同的行为?
Python 源文件具有很好的特性,即能够使用该模式作为模块或作为独立程序(工具)
if __name__ == "__main__":
是否有可能以某种方式为 D 模块源文件获得相同的行为?
(仅限 Unix)
您可以使用设置 aversion
启用main
功能的 shebang 行:
#!/path/to/rdmd --shebang -version=run
version(run) void main() {}
使您的文件可执行 ( chmod +x foo.d
) 并像程序一样运行它 ( ./foo.d
)。
一定要使用唯一的版本标识符(不像我在这里做的)。也许以某种形式包含完全限定的模块名称,或者使用 UUID。
这取决于你想要做什么。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
。
是的,有一个编译指示:
void foo(){
//...
}
version(fooMain){
pragma(startaddress, foo);
}