【问题标题】:Reading metadata in a Haxe macro在 Haxe 宏中读取元数据
【发布时间】:2014-03-31 21:21:22
【问题描述】:

我想知道如何从宏中的类(及其方法)中读取元数据。

我尝试修改this example。 我添加了: 以查看没有它们的元数据是否仅在生成的代码中可用,但什么都没有。在所有三种情况下我的结果都是空的。有什么想法吗?

@:author("Nicolas")
@debug
class MyClass {
    @:range(1, 8)
    var value:Int;

    @broken
    @:noCompletion
    static function method() { }
}

class Boot {
    static public function main() {
        test();
    }

    macro public static function test() {
        trace(haxe.rtti.Meta.getType(MyClass)); // { author : ["Nicolas"], debug : null }
        trace(haxe.rtti.Meta.getFields(MyClass).value.range); // [1,8]
        trace(haxe.rtti.Meta.getStatics(MyClass).method); // { broken: null }
        return haxe.macro.Context.makeExpr({}, haxe.macro.Context.currentPos());
    }
}

【问题讨论】:

    标签: macros haxe


    【解决方案1】:

    为了从宏访问类型,您需要使用haxe.macro.* API 而不是访问haxe.rtti。以下示例将同时跟踪 debug 和 author,它们是应用于 MyClass 的元数据:

    class Boot
    {
      macro public static function test()
      {
        switch (haxe.macro.Context.getType("MyClass"))
        {
          case TInst(cl,_):
            trace(cl.get().meta.get());
          case _:
        }
      }
    }
    

    为了获取类字段元数据,您必须遍历来自cl.get().fields.get() 的所有字段。

    请参阅Context.getType()、ClassType 和 MetaAccess。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多