我经常得到参数不匹配错误,这通常需要我花很多时间来调试program.damn,我真的希望我知道函数的入口要求以及它们来自哪里。
因为我只知道函数变量是一个函数,没有任何其他信息。 我写了像这样的大量代码
public static function call(func:Function,params:Array = null,addToTailIfNotNull:*=null):void{
if (func!=null){
var args:Array =[];
if(params!=null){
args = ArrayTools.clone(params);
}
if (addToTailIfNotNull!=null){
args.push(addToTailIfNotNull);
}
func.apply(null,args);
}
}
我应该更聪明地做事。
答案 0 :(得分:2)
我建议您使用flash.utils.describeType()方法。它返回一个XML,其中包含您作为参数传递的对象的描述。
假设你有一个班级:
public class Example {
public function someMethod(number:Number, string:String):void {
}
}
你打电话到某个地方:
flash.utils.describeType(Example);
你应该在那里得到一个类似的XML:
<method name="someMethod" declaredBy="com.example::Example" returnType="void">
<parameter index="1" type="Number" optional="false"/>
<parameter index="2" type="String" optional="false"/>
<metadata name="__go_to_definition_help">
<arg key="pos" value="501"/>
</metadata>
</method>
我不确定这是你在找什么,就像在你的例子中你传递函数参数那样你会得到一个Function类的描述:
<type name="builtin.as$0::MethodClosure" base="Function" isDynamic="false" isFinal="true" isStatic="false">
<extendsClass type="Function"/>
<extendsClass type="Object"/>
<accessor name="length" access="readonly" type="int" declaredBy="Function"/>
<accessor name="prototype" access="readwrite" type="*" declaredBy="builtin.as$0::MethodClosure"/>
</type>
但是也许你可以重构你的“调用”方法,这样它就可以获得正确的描述(例如将额外的信息传递给它 - 比如对象类和方法名称 - 所以你可以分析它中的方法签名。不是最美丽的解决方案,但仍然......)