给出类似
的功能function printAndAdd( s: String, a: int, b: int ) {
// ...
}
有没有办法在运行时枚举函数的参数(它们的名称及其类型)?像
这样的东西for ( var arg: ArgumentDescriptor in printAndAdd ) {
// arg.type yields the class object of the argument, i.e. 'String' or 'int'.
// arg.name yields the name of the argument, i.e. 's' or 'a'
}
我有一个具有不同签名的事件处理程序列表,我得到要调用的事件处理程序的名称以及Array
个对象。我只能apply()
该函数的数组,但我想先做一些错误检查以提供更好的错误消息。
答案 0 :(得分:2)
您可以使用describeType()查找所需信息。但要实现此功能,必须为public
。 describeType()
不会对私有方法进行反省。
假设printAndAdd
是MyClass
的方法,您可以这样做:
var metadata:XML = describeType(MyClass);
//find all the 'parameter' nodes of any method called 'printAndAdd'
var params:XMLList = metadata..method.(@name == "printAndAdd").parameter;
for each (var param:XML in params) {
var index:int = param.@index;
var type:String = param.@type;
var optional:Boolean = param.@optional == "true";
}
你无法找到的一件事是参数的名称,但我认为它的索引可能足以达到你的目标。
如果您需要比此更强大的反射,请查看as3commons reflect library。