【问题标题】:Get the variable values at runtime using reflection in Dlang使用 Dlang 中的反射在运行时获取变量值
【发布时间】:2016-08-10 01:36:02
【问题描述】:

是否可以在运行时在 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;

【问题讨论】:

  • 之前有人讨论过std.reflection
  • 是的,我已经完成了该线程,但没有可用的库。在谷歌搜索时,我刚从@mitch_ 看到同样的巫术答案。

标签: d phobos


【解决方案1】:

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

【讨论】:

    【解决方案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
    }
    

    【讨论】:

    • 实际上,这是用于编译时反射,您要求运行时。所以,是的,使用巫术。
    猜你喜欢
    • 2012-01-28
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多