D源模块的Hyrbid模块和程序行为

Nor*_*löw 4 python executable module d

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

if __name__ == "__main__":
Run Code Online (Sandbox Code Playgroud)

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

小智 6

(仅限Unix)

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

#!/path/to/rdmd --shebang -version=run
version(run) void main() {}
Run Code Online (Sandbox Code Playgroud)

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

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


J. *_*ler 5

这取决于你想要做什么.AD程序main在所有模块中只需要一个函数作为入口点,因此不存在Python中的隐式方法.D方法是将可执行文件创建为包含a 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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