定义函数时的…(rest)参数


在As3.0中,Function的参数数是被严格限制的,如果定义的参数数与实际参数不同时,系统会报错(incorrect number of arguments) ,那么,“… (rest) parameter”大概就是被派来解救那些困扰于这个问,的孩子们的…

package {
import flash.display.Sprite;
public class ArgTest extends Sprite {
private var argArr:Array=new Array(”EEE”,”FFF”,”GGG”,”HHH”);
private var obj=new Object();
public function ArgTest() {
myArgFunc(”AAA”, “BBB”,”CCC”);
myArgFunc.apply(null,argArr)
}
public function myArgFunc(…args):void {
//取args做为参数数组名
trace(args);
}
}
}

 
从程序中可见,…args在作为参数集时与arguments class很相似.可其实args与arguments class的方法完全无关,两者不可混淆。
如下例是可行的:

package {
import flash.display.Sprite;
public class ArgTest extends Sprite {
private var argArr:Array=new Array(”EEE”,”FFF”,”GGG”);
private var count:Number=0;
public function ArgTest() {
myArgFunc(”AAA”, “BBB”,”CCC”);
}
public function myArgFunc(A,B,C):void {
trace(arguments);
if (count++<10) {
myCallee(arguments.callee);
}
}
public function myCallee(caller:Function) {
caller.apply(null,argArr);
}
}
}

 


如果取用…args作为参数,则不管取args.callee还是arguments.callee都是无效的.须注意,在As3中,推荐用“… (rest) parameter”方法来代替arguments的(ActionScript 3.0 includes a new ...(rest) keyword that is recommended instead of the arguments class.).
另外发现Array.sort()和Array.splice()也用到了…(rest) ,暂且表过吧.

你可能感兴趣的:(C++,c,REST,Flash,actionscript)