2011-07-09 45 views
2

好吧,所以我们都知道在函数中使用...(rest)参数可以让我们传递任意数量的参数,如在Adobe AS3手册中的示例:Flash AS3 ...(rest)参数

function traceArgArray(x: int, ... args) { 

for (var i:uint = 0; i < args.length; i++) { 

trace(args[i]); 

} 

} 

traceArgArray(1, 2, 3); 

,但我会爱能够做的是有其中之一的选项传递参数的方式或从已经存在的数组传递参数:

myArray:Array = new Array(1,2,3); 

等:

traceArgArray(myArray);

正如我在这里写的,该函数将myArray视为一个单独的对象,所以输出为1,2,3 - 表示整个数组,而不是数组的单个内容。

为了改造myarray的成其余运营商将承认作为个体元素的列表以逗号分隔的列表中,我尝试这样做:

traceArgArray(myArray.join()); 

但这并没有改变输出。看起来在这种情况下,参数被解释为单个字符串而不是逗号分隔的列表。

所以,我希望有人能帮助我,可以通过两种方式来表达这一难题:

是否有可能获得其余参数对待数组参数作为一个逗号分隔的参数列表?

- 或 -

有没有一种方法,我能够把一个数组转换成一个逗号分隔的列表,然后将该列表传递给用逗号分隔的列表(而不是一个长的字符串)的功能,以便休息操作员可以正确解释它吗?

我想要做的基本事情 - 能够将值的数组传递给接受任意数量参数的函数 - 似乎是通用的,所以也许有一种解决方法,我不是因为我迷恋其他运营商本身。

感谢您的阅读!

+0

可能重复http://stackoverflow.com/questions/5260875/pass-arguments-from-an-array -to-an-actionscript-method-with-rest-argument) –

+0

http://stackoverflow.com/questions/636853/filling-in-rest-parameters-with-an-array可能的副本 –

+0

投票关闭为重复 –

回答

2

你在找什么是Function.apply()。在你的情况是这样的:

myArray:Array = new Array(1,2,3); 

function traceArgArray(x: int, ... args) { 
    for (var i:uint = 0; i < args.length; i++) { 
     trace(args[i]); 
    } 
} 

traceArgArray.apply(this, [0].concat(myArray)); // [0] being the first argument (x) 
0

我觉得在这种情况下,它更多的是处理ARGS然后试图调用不同的方法...

traceArgArray(1, 2, 3); 

    var myArray:Array = new Array(1,2,3); 
    traceArgArray(1,myArray,"hello"); 


    myArray.push(["a",23,"her", 1.456, ["--","||",12,11] ]); 
    traceArgArray(1,myArray,"hello"); 

    private var theArgsILike:Array= new Array(); 

    private function traceArgArray(x: int, ... args):void { 

    //Creates the args you expect... 
     theArgsILike.push(x); 
     addArgs(args); 

    // Trace both old and new style args 
     trace("NEW Call: ------"); 
     trace("\n \targs: ------"); 
     for (var i:uint = 0; i < args.length; i++) {  
      trace(args[i]); 
     } 
     trace("\n \t The Args I Like: ------"); 
     for (i = 0; i < theArgsILike.length; i++) { 
      trace(theArgsILike[i]); 
     } 
     trace("\n"); 

     theArgsILike = new Array(); 
    } 

    //splitting each array in its parts to add them on theArgsILike 
    private function addArgs(inArgs:Array):void{ 
      //check if it is array 
     for each(var arg in inArgs){ 
        if(Class(getDefinitionByName(getQualifiedClassName(arg))) == Class(getDefinitionByName(getQualifiedClassName(inArgs))) ){ 
        //spilt iteratively 
         addArgs(arg); 
        } 
        else{ 
        // add arg 
         theArgsILike.push(arg); 
        } 
     } 
    } 
的[传递从数组参数的ActionScript方法与...(其余)参数](