如何打印或捕获当前模块名称?

How do you print or capture the current module name?

我想在该源文件中打印我的主要源文件的模块名称。我试过这个:

import std.stdio;
import std.traits; // moduleName template

int main(string[] args)
{
    writeln("The module name is: ",moduleName!moduleName);
    return 0;
}

然而,它打印:

The module name is: std.traits

moduleName 模板描述为:

Get the module name (including package) for the given symbol.

所以moduleName!moduleName应该给std.traits.

只需将模板参数替换为任何其他符号即可获得它的模块名称。

例如writeln(moduleName!main).

另一种方法是使用 writeln(__MODULE__).

使用 __MODULE__ 是正确的方法。这是一个特殊的标记,如 __FILE____LINE__,这意味着它将在调用站点展开。参见 the specs for some example