2011-07-09 13 views
2

OK、関数内の...(rest)パラメータを使用すると、Adobe AS3マニュアルの例のように、任意の数の引数を渡すことができます。Flash AS3 ...(rest)パラメータ

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(1, 2, 3); 

だがどちらかのオプションは、個々の引数を渡したり、既存のアレイから引数を渡すことです

traceArgArray(myArray);

私がここで書いたように、この関数はmyArrayを単一のオブジェクトとして扱うため、出力は1,2,3です - 配列の個々の内容ではなく全体としての表現。

残りのオペレータは、個々の要素のリストとして認識することになるカンマ区切りリストにmyarrayのを変換するために、私はこの試みた:

traceArgArray(myArray.join()); 

をそれが出力を変更しませんでした。この場合、引数はコンマで区切られたリストではなく単一の文字列として解釈されているようです。

だから、私は誰かが私を助けることを願ってのパズルは、2つの方法のいずれかで表現することができます。

は、引数のカンマ区切りのリストとして配列引数を処理するために、残りのパラメータを取得することが可能ですか? - または -

はそのように私はカンマ区切りのリスト(というよりも長い文字列)として関数にそのリストを渡し、その後、コンマ区切りのリストに、配列を変換し、することができる方法はあります残りの演算子はそれを正しく解釈できますか?

私がしたい基本的なことは、値の配列を任意の数の引数を受け入れる関数に渡すことができるようになることです。一般的に使用されるようですが、回避策があります。私は残りの演算子そのものに取りつかれているので見ています。

読んでいただきありがとうございます!

+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

私はこのケースでは、それは別のメソッドを呼び出ししようとし、次に引数の取り扱いについての詳細だと思います...

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メソッドに配列から引数を渡す]の