1

アイデアは、配列args[]を渡すことです[<int>, <String>, <int>]

次のような複数の引数を受け入れる関数に:

myFunc (int arg1, String arg2, int arg2 ):void

関数呼び出しのように:

myFunc(args[]);元の関数呼び出しを変更せずに実現できます。

どんな提案でも大歓迎です。

4

3 に答える 3

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 ()

于 2013-01-24T06:56:19.227 に答える
0

厳密に言えば、ポリモーフィズムはサポートされていないため、関数に次のシグネチャがある場合:

myFunc (arg1:int, arg2:String, arg3:int):void

を呼び出すとmyFunc(array);、コンパイル エラーがスローされます。あなたが望むと思うものを達成するには2つの方法があります:最初の引数を次のように定義するか:*、特別なAS3を使用します...rest

  1. 最初の解決策、関数は次のように定義されます。

    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
    }
    
  2. 2番目の解決策(私はそれが好きですが、それは主に「味」の問題です):

    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
    }
    

お役に立てれば。

于 2013-01-24T10:03:57.543 に答える
-2

myFunc (args[0], args[1], args[2]);

于 2013-01-24T08:23:10.950 に答える