如何自省Flex功能的签名?

时间:2012-11-20 16:02:08

标签: actionscript-3 flex

给出类似

的功能
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()该函数的数组,但我想先做一些错误检查以提供更好的错误消息。

1 个答案:

答案 0 :(得分:2)

您可以使用describeType()查找所需信息。但要实现此功能,必须publicdescribeType()不会对私有方法进行反省。

假设printAndAddMyClass的方法,您可以这样做:

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