1

是否可以在运行时在 dlang 中获取类/结构/其他变量值以获取/设置其值?如果是,请提供示例。还有可能获得运行时变量值吗?

前任:

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

输出:

可变变量的值 = 5;
bvariable 的值 = 10;

4

2 回答 2

6

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

于 2016-08-10T02:09:30.200 回答
4

我首先建议尝试像提到的@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
}
于 2016-08-12T11:20:15.357 回答