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 のほうにあるので、もしよかったら使ってみてくださいね!