使用Dlang中的反射在运行时获取变量值

时间:2016-08-10 01:36:02

标签: d phobos

是否有可能在运行时在dlang中获取class / struct / other变量值来获取/设置其值?如果是,请提供示例。 还有可能获得运行时变量值吗?

例如:

class S{ int svariable = 5;}
class B { int bvariable = 10;}
void printValue(T, T instanceVariable, string variableName) {
    writeln("Value of ",  variableName, "=", instanceVariable.variableName);
}

输出:

  

svariable的值= 5;
     bvariable的值= 10;

2 个答案:

答案 0 :(得分:5)

有一个名为witchcraft的库允许运行时反射。有一些如何在该页面上使用它的例子。

答案 1 :(得分:2)

我首先建议尝试像@mitch_提到的反射库。但是,如果您不想使用外部库,可以使用getMember来获取和设置字段以及调用函数:

struct S {
    int i;
    int fun(int val) { return val * 2; }
}

unittest {
    S s;
    __traits(getMember, s, "i") = 5; // set a field
    assert(__traits(getMember, s, "i") == 5); // get a field
    assert(__traits(getMember, s, "fun")(12) == 24); // call a method
}