簡體   English   中英

在Haxe宏中讀取元數據

[英]Reading metadata in a Haxe macro

我想知道如何從宏中讀取類(及其方法)中的元數據。

我試圖修改這個例子 我補充說:看看沒有它們的元數據是否僅在生成的代碼中可用,但沒有。我在所有三種情況下都有一個空結果..任何想法?

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

要從宏訪問類型,您需要使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM