JavaScriptでCLOSライクな多重継承と総称関数
2年ぶりくらいにCLOS(GaucheのやつなのでせいかくにはTklos)をかじったらやっと意味が分かりました。
多重ディスパッチかっこよすぎる。
おもむろにgithubを探したらJS-CLOSっていうロシアの人が1年前に放棄した動かないJSプロジェクトがあったので、フォークして、まあなんとか遊べる程度まで作り込んでみました。
Github:
https://github.com/ympbyc/js-clos
Qiita:
http://qiita.com/items/5877294b97aaeaee5ae1
詳しい説明はQiitaを見てもらうとして、JS-CLOSで僕が気に入ってるのは、is-a?に===での比較が含まれているところです。普通is-a?はインスタンスとクラスを見て、apple is a Fruitみたいな関係を調べると思うんですけど、JS-CLOSでは、an apple is an appleとかFruit is a Fruitっていう比較を許してるんですよ。
これでなにが嬉しいかっていうと、fibの例みたいに引数の型指定のところに値を入れたり、bumpの例みたいにクラスをマッチさせたりできることです。だから型指定というよりはむしろパターンマッチっぽいですね。