可変長引数を別のメソッドに渡す
- 2010年6月 9日 23:42
- コメント:0
ActionScriptは次のような書き方をすると、数のわからない複数の引数(不特定多数、可変長の引数)を受けることができます。
public function hoge(...args):void
{
// 引数は、配列のように args[0]、args[1]のように添え字を付けることで
// 参照できます。また、args.lengthとすれば引数の数も取得できます。
}
ですが、例えば受け取った引数をそのまま別のメソッドに渡したい場合、どうすれば良いでしょうか?次のようにした場合、引数の数が限られてしまうので問題があります。
public function max(...args):Number
{
var maxNum:Number = Math.max(args[0], args[1], args[2]);//数が固定される
return maxNum;
}
また、次のようにすると型違いでコンパイル時にエラーが出ます。
public function max(...args):Number
{
var maxNum:Number = Math.max(args);//型違いでコンパイルエラー。
return maxNum;
}
これを解決すべく登場するのが、Functionインスタンスのapplyというメソッドです。
public function max(...args):Number
{
var maxNum:Number = Math.max.apply(Math, args);//引数がいくつあっても大丈夫
return maxNum;
}
Function.apply は第一引数に「メソッドを持つオブジェクト」、第二引数に「引数が格納されている配列」を受け取ります。「引数が格納されている配列」の要素数はいくつでも構わないので、...argsをそのまま渡してやればいいということです。
なかなか使う場面はないかもしれませんが、知っておくと意外なところで活躍するかもしれません。


コメントを投稿する