Python源文件具有良好的特性,既可以充当模块,也可以使用模式充当独立的程序(工具)。
if __name__ == "__main__":
对于一个D模块源文件,有可能得到相同的行为吗?
发布于 2013-09-03 12:54:12
(仅Unix)
您可以使用一个shebang行来设置一个version
,它启用了一个main
函数:
#!/path/to/rdmd --shebang -version=run
version(run) void main() {}
使您的文件可执行(chmod +x foo.d
)并像程序(./foo.d
)一样运行它。
一定要使用唯一的版本标识符(与我在这里所做的不同)。可能以某种形式包含完全限定的模块名称,或者使用UUID。
发布于 2013-08-30 13:46:54
这取决于你想做什么。一个D程序需要所有模块的一个main
函数作为入口点,所以没有像Python那样的隐式方法。D方法是将可执行文件创建为一个单独的模块,该模块包含一个main
并导入另一个模块。
但是,如果您只想进行测试,则应该将可执行代码放在unittest
块中(没有main
),然后可以使用rdmd -main -unittest scratch.d
运行该文件,这将为您添加一个存根main
。
如果您真的想要制作一个双重功能模块(这并不是真正的D方式),您可以将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-30 19:26:58
是的,有普拉格马:
void foo(){
//...
}
version(fooMain){
pragma(startaddress, foo);
}
https://stackoverflow.com/questions/18537761
复制