在Haxe宏中读取元数据

时间:2014-03-31 21:21:23

标签: macros haxe

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

我尝试修改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());
    }
}

1 个答案:

答案 0 :(得分:6)

要从宏访问类型,您需要使用haxe.macro.* API而不是访问haxe.rtti。以下示例将跟踪debugauthor,它们是应用于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()ClassTypeMetaAccess