如何使用D中函数的完整命名空间路径

如何使用D中函数的完整命名空间路径,d,D,我希望能够使用函数,例如writefln(),但不必在文件顶部添加import std.stdio 另一种解释方法是C++中的方法。你可以输入std::cout我认为你做不到。用C++中的命名空间< /COMP>语句,d中的代码>导入语句比 >多。它还取代了#include预处理器指令。您必须使用导入部件。但是,可以使用前面的完整模块路径来寻址方法/函数/任何内容。例如,如果导入std.stdio(并使用Phobos),则std.stdio.writefln(“…”)将有效。如果你有一个以上的函

我希望能够使用函数,例如
writefln()
,但不必在文件顶部添加
import std.stdio


另一种解释方法是C++中的方法。你可以输入std::cout我认为你做不到。用C++中的命名空间< /COMP>语句,d中的代码>导入语句比 >多。它还取代了
#include
预处理器指令。

您必须使用导入部件。但是,可以使用前面的完整模块路径来寻址方法/函数/任何内容。例如,如果导入std.stdio(并使用Phobos),则std.stdio.writefln(“…”)将有效。如果你有一个以上的函数叫做“写C++”,这是有用的。D也是一种模块化语言。D中的模块具有构造函数/析构函数。此外,D还有包。在此处阅读有关D中的模块和包的更多信息:

下面是该页面最有趣的部分:

模块具有一对一的功能 与源文件的通信。这个 module name是带有 剥离路径和扩展

模块自动提供 其内容的命名空间范围。 模块表面上相似 类别,但不同之处在于:

  • 每个模块只有一个实例,它是静态的 分配的
  • 没有虚拟表
  • 模块不继承,它们没有超级模块,等等
  • 每个文件只有一个模块
  • 可以导入模块符号
  • 模块总是在全局范围内编译,并且不受 周围的属性或其他修改器
模块可以在中分组在一起 称为包的层次结构

模块提供了几种保证: -模块的导入顺序不影响 语义学。 -模块的语义不受其导入内容的影响。 -如果模块C导入模块a和B,则不会对B进行任何修改 静默地更改C中的代码,即 依赖于


我知道这是个老问题,但我看不出正确的答案,所以我还是要回答

静态输入 基本导入对程序很有效 具有相对较少的模块和 进口。如果有很多 导入时,可以启动名称冲突 发生在表中的名称之间 各种进口模块。单程 通过使用静态导入停止此操作。 静态导入需要使用 引用的完全限定名 模块名称:

静态导入标准stdio;
void main()
{
writefln(“hello!”);//错误,writefln未定义
std.stdio.writefln(“hello!”);//好的,writefln是完全限定的
}

您可以导入单独的函数/类(不确定语法):

import std.stdio: writef, writefln;