我想知道如何从宏中的一个类(及其方法)读取元。
我试图修改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());
}
}
为了从宏观访问类型,你需要使用haxe.macro.*
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()
各个领域。