2014-03-31 24 views
5

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

我試圖修改此示例:https://github.com/HaxeFoundation/HaxeManual/blob/master/md/manual/lf-metadata.md 我說「:」來看看,沒有他們的元數據只有在生成的代碼即時拍攝,但沒有什麼..我有一個空的結果在這三種情況下..

請任何想法嗎?

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

回答

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.getTypeClassTypeMetaAccess

+0

謝謝你,我看到了類類別能幫助我,但我不知道從哪裏得到它。非常感謝你 ! – Peekmo

+0

對此很新,但是你能否詳細說明'cl'和'_'的來源? (例如:在案例TInst(cl,_):'和'case _:') – bigp

+0

@bigp查看模式匹配文檔(位於http://haxe.org/manual/lf-pattern-matching。 html) – Waneck