args[]
这个想法是传递一个数组[<int>, <String>, <int>]
到接受多个参数的函数,例如:
myFunc (int arg1, String arg2, int arg2 ):void
这样函数调用:
myFunc(args[]);
可以在不改变原函数调用的情况下实现。
欢迎任何建议。
args[]
这个想法是传递一个数组[<int>, <String>, <int>]
到接受多个参数的函数,例如:
myFunc (int arg1, String arg2, int arg2 ):void
这样函数调用:
myFunc(args[]);
可以在不改变原函数调用的情况下实现。
欢迎任何建议。
您可以使用Function.apply()
.
在你的情况下
myFunc.apply(null,args);
您的 args[] 应该包含与您的数据类型匹配的 myFunc args 列表的相同顺序。
这样你就不能改变你原来的功能。
性能方面apply()
不太好。其他情况可以使用call()
。
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Function.html#apply ()
严格来说,不支持多态,所以如果你的函数有这个签名:
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
}
希望这可以帮助。
myFunc (args[0], args[1], args[2]);