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

使用Dlang中的反射在运行时获取变量值,d,phobos,D,Phobos,是否可以在运行时在dlang中获取class/struct/other variables值以获取/设置其值?如果是,请提供示例。 也可以获取运行时变量值吗 例: 类S{int svariable=5;} 类B{int bvariable=10;} 无效printValueT、T instanceVariable、字符串variableName{ 的writelnValue,variableName,=,instanceVariable.variableName; } 输出: 变量的值=5; b

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

例:

类S{int svariable=5;} 类B{int bvariable=10;} 无效printValueT、T instanceVariable、字符串variableName{ 的writelnValue,variableName,=,instanceVariable.variableName; } 输出:

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


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

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

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

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
}

首先,我建议您尝试一下上面提到的@mitch_uuu这样的反射库。但是,如果不想使用外部库,可以使用获取和设置字段以及调用函数:

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
}

前一段时间有一些讨论。是的,我已经读过了那个帖子,但没有任何可用的库。在谷歌搜索的时候,我刚刚遇到了来自@mitch!的巫术相同的答案。不久前就有一些关于巫术的讨论。是的,我已经通过了那个线索,但没有任何可用的图书馆。在谷歌搜索的时候,我刚刚从@mitchè得到了相同的答案。实际上,这是用于编译时反射的,而您要求的是运行时。所以,是的,使用巫术。实际上,这是为了编译时反射,你要求运行时。所以,是的,使用巫术。