在HAXE宏读取元数据

问题描述 投票:6回答:1

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

我试图修改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个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.