如何在D中编译时设置一个类变量?

时间:2013-12-31 20:10:43

标签: d

如何在编译时设置此PREFIX值?更好的是使用数组/元组并附加到PREFIX。

class CarbNamespace {

  //This is the variable I'd like to set
  enum/Tuple PREFIX;

  void initPrefix(string _PR)(){
     //I would like to set the variable PREFIX variable to _PR(or some string modification)
     PREFIX = _PR; ??
  }


}

2 个答案:

答案 0 :(得分:3)

你的问题和细节并不在我脑海中。

“如何在D中编译时设置类变量?”

你做不到。正如Adam从Kyle的回答中指出的那样,你可以在编译时创建一个对象,这实际上会在编译时设置变量;我怀疑这是你的兴趣。

  

//这是我想设置的变量

     

enum / Tuple PREFIX;“

好吧,如果它是枚举(不是类型),那么在编译时设置它当然可以完成

class CarbNamespace {
  //This is the variable I'd like to set
  enum PREFIX = giveMeValue();
}

auto giveMeValue() {
  return "text";
}

但这不是一个类变量,它只是一个带有类命名空间的枚举常量,可能是你想要的。

在运行时加载模块之前,类不存在。这意味着您需要在模块加载时设置变量,这是通过模块构造函数(静态)来完成的。

static this() {
  CarbNamespace.PREFIX = giveMeValue();
}

class CarbNamespace {
  //This is the variable I'd like to set
  static string PREFIX;
}

string giveMeValue() {
  return "text";
}

答案 1 :(得分:1)

我不完全确定我是否理解你的问题,但试试这个:

class CarbNamespace
{
    static string[] PREFIX = ["test1_", "test2_"];

    void appendToPrefix(string _PR)
    {
        PREFIX ~= _PR;
    }
}

void main()
{
    import std.stdio : writeln;
    CarbNamespace ns = new CarbNamespace();
    writeln(ns.PREFIX);
    ns.appendToPrefix("test3_");
    writeln(ns.PREFIX);
}