Python源代码文件具有很好的特性,既可以作为模块使用,也可以使用模式作为独立程序(工具)。
if __name__ == "__main__":
是否有办法使D模块源文件具有相同的行为?
Python源代码文件具有很好的特性,既可以作为模块使用,也可以使用模式作为独立程序(工具)。
if __name__ == "__main__":
是否有办法使D模块源文件具有相同的行为?
#!/path/to/rdmd --shebang -version=run
version(run) void main() {}
将您的文件设置为可执行 (chmod +x foo.d
) 并像运行程序一样运行它 (./foo.d
)。
请确保使用唯一的版本标识符(不像我在这里所做的那样)。也许以某种形式包含完全限定的模块名称,或者使用UUID。
main
函数作为入口点,因此没有像 Python 中那样隐式的方式。D 语言的方法是将可执行文件创建为包含 main
并导入其他模块的单独模块。main
的 unittest
块中,然后可以使用 rdmd -main -unittest scratch.d
运行该文件,它会为您添加一个存根 main
。main
放在唯一的 version
块中。module scratch; // file scratch.d
import std.stdio;
void foo(){ writeln("FOO"); }
version(scratchExe) {
void main() {
foo();
}
}
然后使用 dmd scratch.d -version=scratchExe
编译可执行版本。
pragma(startaddress)
绕过 C 和 D 运行时库的初始化,仅应用于低级任务。它不适用于此情况。(这怎么得到了 5 个赞?这从未生效过且永远不会生效。) - Vladimir Panteleev