D语言静态类函数未定义的标识符

Kry*_*hic 1 d

我开始学习D编程语言(它非常棒),当我开始探索函数时遇到了一个小问题.设置非常基本; 这只是一种方法,可以找出我用过的其他语言的相似之处.这是我的班级声明:

module TestClass;
import std.string;
class TestClass
{
    this()
    {
        // Constructor code
    }

    public static string getData(){
        return "Test";
    }
};
Run Code Online (Sandbox Code Playgroud)

这是我的主要内容:

module main;

import std.stdio;
import std.string;
import TestClass;

void main(string[] args)
{
    writeln(TestClass.getData());
    stdin.readln();
}
Run Code Online (Sandbox Code Playgroud)

在TestClass中调用静态函数似乎存在问题.我收到"未定义的标识符"错误.这是一张图片:

在此输入图像描述

有谁知道我做错了什么?我试着查看数字火星网站上的文档,但说实话,这有点违反直觉.

cfh*_*cfh 5

现在没有D编译器方便,并且暂时没有使用该语言,我想我记得在D开始时有类似的问题.

我认为该import语句会引入模块TestClass,因此当您键入时TestClass.getData(),编译器会认为您指的getDataTestClass模块中的全局函数.

您可以通过多种方式解决此问题:

  • TestClass模块重命名为其他内容.这样可以避免模块和类之间的名称冲突.正如Jonathan M Davis在评论中指出的那样,D社区中的约定是对模块使用小写字符,因此您可以简单地将其重命名为testclass.
  • 明确导入类:

    import TestClass : TestClass;
    
    Run Code Online (Sandbox Code Playgroud)
  • 写入TestClass.TestClass.getData()以引用模块内的类.

还应该指出的是,与Java不同,类不需要分别在D中的单独模块中.