アイデアは、配列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);
、コンパイル エラーがスローされます。あなたが望むと思うものを達成するには2つの方法があります:最初の引数を次のように定義するか:*
、特別な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
}
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
}
お役に立てれば。
myFunc (args[0], args[1], args[2]);