2014-03-31 13 views
5

Ich würde gerne wissen, wie man Metadaten aus einer Klasse (und ihrer Methode) in einem Makro liest?Haxe - Lesen von Metadaten im Makro

Ich habe versucht, dieses Beispiel zu ändern: https://github.com/HaxeFoundation/HaxeManual/blob/master/md/manual/lf-metadata.md Ich fügte hinzu, „:“, um zu sehen, ob Metadaten ohne sie nur in generierten Code Avilable waren, aber nichts .. Ich habe ein leeres Ergebnis in den drei Fällen ..

Irgendeine Idee bitte?

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

Antwort

6

Um die Typen von einem Makro zugreifen zu können, müssen Sie lieber die haxe.macro.* API verwenden, als haxe.rtti zugreifen. Das folgende Beispiel verfolgen beide debug und author, die die Metadaten sind MyClass angewendet:

class Boot 
{ 
    macro public static function test() 
    { 
    switch (haxe.macro.Context.getType("MyClass")) 
    { 
     case TInst(cl,_): 
     trace(cl.get().meta.get()); 
     case _: 
    } 
    } 
} 

Um Klassenfeld Metadaten zu erhalten, müssen Sie alle Felder aus cl.get().fields.get() gehen.

Siehe Context.getType, ClassType und MetaAccess

+0

Danke, ich sah, dass Classtype mir helfen könnte, aber ich wusste nicht, wo es zu bekommen. Vielen Dank ! – Peekmo

+0

Ziemlich neu dazu, aber könnten Sie herausfinden, woher die 'cl' und' _' herkommen? (Beispiel: in TInst (cl, _): 'und' case _: ') – bigp

+0

@bigp werfen Sie einen Blick auf die Mustervergleichsdokumentation (unter http://haxe.org/manual/lf-pattern-matching). html) – Waneck