我们的想法是传递一个args[]
[<int>, <String>, <int>]
接受多个参数的函数,如:
myFunc (int arg1, String arg2, int arg2 ):void
这样的函数调用:
myFunc(args[]);
可以在不改变原始函数调用的情况下实现。
欢迎任何建议。
答案 0 :(得分:7)
您可以使用Function.apply()
。
在你的情况下
myFunc.apply(null,args);
你的args []应该包含与你的数据类型匹配的myFunc args列表的相同顺序。
这样你就无法改变原有的功能。
明智的表现apply()
并不是那么好。您可以使用其他情况call()
。
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Function.html#apply()
答案 1 :(得分:0)
严格来说,不支持多态,所以如果你的函数有这个签名:
myFunc (arg1:int, arg2:String, arg3:int):void
myFunc(array);
的任何调用都会引发编译错误。
有两种方法可以达到我想要的效果:要么将第一个arg定义为:*
,要么使用特殊的AS3 ...rest
第一个解决方案,函数定义如下:
myFunc (arg1:*, arg2:String = null, arg3:int = null):void{
if(arg1 is Array){
var array:Array = arg1 as Array;
arg1 = array[0] as int;
arg2 = array[1] as String;
arg3 = array[2] as int;
}
//here you would have to verify your args for coherence
...//your code here
}
第二种解决方案(我更喜欢它,但它主要是'味道'):
myFunc (...rest):void{
var array:Array = rest[0] as Array,
arg1:int = rest[0] as int,
arg2:String = rest[1] as String,
arg3:int = rest[2] as int,
if(array is Array){
arg1 = array[0] as int;
arg2 = array[1] as String;
arg3 = array[2] as int;
}
//here you would have to verify your args for coherence
...//your code here
}
希望这会有所帮助。
答案 2 :(得分:-2)
myFunc(args [0],args [1],args [2]);