Macros 在Haxe宏中读取元数据

Macros 在Haxe宏中读取元数据,macros,haxe,Macros,Haxe,我想知道如何从宏中的类(及其方法)读取元数据 我试图修改。 我添加了:,以查看没有它们的元数据是否只在生成的代码中可用,而不可用。。在这三种情况下,我的结果都是空的。。有什么想法吗 @:author("Nicolas") @debug class MyClass { @:range(1, 8) var value:Int; @broken @:noCompletion static function method() { } } class Boot

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

我试图修改。 我添加了
,以查看没有它们的元数据是否只在生成的代码中可用,而不可用。。在这三种情况下,我的结果都是空的。。有什么想法吗

@: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());
    }
}

为了从宏访问类型,您需要使用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()
中的所有字段


请参见,和。

这是一个非常新的概念,但您能否详细说明
cl
\uuu
的来源?(例如:在
案例TInst(cl,551;):
案例551;:
)@bigp查看模式匹配文档(在)