D源文件的混合模块和程序行为

时间:2013-08-30 16:42:43

标签: python module executable d

Python源文件具有使用模式作为模块或独立程序(工具)的良好属性

if __name__ == "__main__":

是否有可能为D模块源文件获得相同的行为?

3 个答案:

答案 0 :(得分:6)

(仅限Unix)

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

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

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

请务必使用唯一的版本标识符(与此处不同)。也许以某种形式包含完全限定的模块名称,或者使用UUID。

答案 1 :(得分:5)

这取决于你想要做什么。 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编译可执行版本。

答案 2 :(得分:4)

pragma:

void foo(){
//...
}

version(fooMain){
pragma(startaddress, foo);
}