当前位置:  开发笔记 > 前端 > 正文

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

如何解决《如何在D中使用函数的完整命名空间路径》经验,为你挑选了3个好方法。

我希望能够使用诸如writefln()但不必添加import std.stdio到文件顶部的功能.

解释它的另一种方法是你在C++中的方式.您可以键入std::cout << "Test";,这将阻止您必须添加using namespace std;.我想做同样的事情,但是在D.



1> zildjohn01..:

我知道这是一个老问题,但我没有看到正确的答案,所以无论如何我都在回答.

静态进口

基本导入适用于模块和导入相对较少的程序.如果有大量导入,则可以在各种导入模块中的名称之间开始发生名称冲突.阻止这种情况的一种方法是使用静态导入.静态导入需要使用完全限定名称来引用模块的名称:

static import std.stdio;

void main()
{
    writefln("hello!");            // error, writefln is undefined
    std.stdio.writefln("hello!");  // ok, writefln is fully qualified
}

资源



2> 小智..:

如上所述,D模块远不止C++命名空间.D也是MODULAR语言.D中的模块具有构造函数/析构函数.而且,D有包裹.在此处阅读有关D中模块和软件包的更多信息:http://www.digitalmars.com/d/2.0/module.html.

这是该页面所说的最有趣的部分:

模块与源文件一一对应.模块名称是文件名,其路径和扩展名被剥离.

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

每个模块只有一个实例,它是静态分配的.

没有虚拟表.

模块不继承,没有超级模块等.

每个文件只有一个模块.

可以导入模块符号.

模块始终在全局范围内编译,不受周围属性或其他修饰符的影响.

模块可以在称为包的层次结构中组合在一起.

模块提供了几种保证: - 导入模块的顺序不会影响语义. - 模块的语义不受导入它的影响. - 如果模块C导入模块A和B,对B的任何修改都不会以静默方式更改依赖于A的C中的代码.



3> Maurice Gild..:

您必须使用导入部分.但是,可以使用前面的完整模块路径来解决方法/功能/任何问题.例如,如果导入std.stdio(并使用Phobos),则std.stdio.writefln("...")将有效.如果您有多个名为"writefln"的函数,这将非常有用.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有