给出Foo类
class Foo
{
public function new(foo:Int, bar:Int, foobar:Int) {}
}
检索new
接受的参数数量。我尝试过使用@:rtti
- 然后我尝试了
for(field in haxe.rtti.Rtti.getRtti(Foo).fields) {
if (field.name == "new") {
trace(field.type);
}
}
结果很有希望
**
TestAll.hx:246: CFunction({
length : 3,
h : {
item : {
name : foo,
opt : false,
t : CAbstract(<...>,<...>),
value : null
},
next : {
item : {
name : <...>,
opt : <...>,
t : <...>,
value : null
},
next : {
item : <...>,
next : null
}
}
},
q : {
item : {
name : foobar,
opt : false,
t : CAbstract(<...>,<...>),
value : null
},
next : null
}
},CAbstract(Void,{
length : 0
}))**
所以我尝试了field.type.length
。
test / TestAll.hx:246:字符14-31:haxe.rtti.CType没有字段 长度
快速浏览http://api.haxe.org/haxe/rtti/CType.html#CFunction后, 我可以看到
CFunction(args:List<FunctionArgument>, ret:CType)
???我很困惑 - 它包含一个List,但它只返回CType?如何获得我想要的信息?
谢谢。
PS。我不想要宏解决方案,这是在单元测试中使用的,并且构造本身的生成已经非常重。
答案 0 :(得分:1)
CType是枚举,而CFunction是可能的枚举值之一(或“枚举构造函数”)。
您可以在此处查看源代码:https://github.com/HaxeFoundation/haxe/blob/development/std/haxe/rtti/CType.hx#L42-L51
您需要使用switch
语句深入了解并获取列表:
switch (field.type) {
case CFunction(args,returnType):
trace(args.length);
default:
// Do nothing
}
要了解更多信息,我建议您阅读以下手册: