AS3bind をコミットしたよ!
少し前になりますが、ActionScript 界隈で有名な SparkProject さんに「AS3bind」をコミットさせていただきました。
hidachinoiro/AS3bind - Spark project
これは、boost::bind っぽい引数束縛を ActionScript で実現したもので、関数の任意の引数を固定して新しい関数を作ります。うーん、自分で言っててワケワカラン。サンプル見てもらった方が速いかも知れません。
import org.libspark.as3bind.*; // * を使うのが嫌いな方もいると思いますが、 // グローバルなシンボルが多いのでこう書くことをお勧めします function f(a:int, b:int):int { return a+b; } var g:Funciton = bind(f, 2, 3); g(); // f(2, 3) を呼び出したのと同じこと!
一部の引数だけ固定したり, this を固定したりもできます。
// 「_1」〜「_9」を渡すと関数呼び出し時に渡された引数に置き換わる var g:Function = bind(f, 2, _1); g(4); // f(2, 4) を呼び出したのと同じこと!
var g:Function = bind(thisObj, f); g(); // f.call(thisObj) と同じこと。f 中で this は thisObj になる
自分的にはイベントリスナーとして渡す関数をよく bind で作ったります。こんな感じ。
// bind された関数は引数を可変長で取るので Event が渡されても無視します
addEventListener(Event.ENTER_FRAME, bind(update));
もうちょい詳しいサンプルと説明は SparkProject のほうにあるので、もしよかったら使ってみてくださいね!