Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

引数束縛 or カリー化 or MochiKit.bindって感じ

うーん、ショートカットメソッドとか作るときにグリグリ書くのもあんまりって感じだな。
なので引数束縛をやってシンプルに書ける機構が必要だなと。
MochiKitのbindは第一引数だけ束縛するんだけど全部やればええやんってことで。

kumu.bind = function(func){
  return function(){
    var bind = arguments;
    return function(){
      var args  = new Array();
      args = args.concat.apply(args, bind);
      args = args.concat.apply(args, arguments);
      return func.apply(null, args);
    };
  };
};

まー引数をガツガツくっつけていけばいいだけなので綺麗に書くとこんな感じ。
(まーこれもどっかで見た事あるよなあ)
全部拾いあげてるのがいいのか悪いのかは別だけど。
test.html

function test(x, y){
  return x + y;
}
function test2(x){
  return kumu.bind(test)(x);
}
var f = test2(10);
alert(f(10));

ほおー。これはこれは便利っすなあ。
クロージャーで関数を手作業で書く必要なくなりますなあ。
これを使うと依然書いた

//tag,attr,textのメソッドを引数束縛
var H1 = kumu.bind(kumu.dom.createDOM)('h1');
//第一引数を束縛するのでattr,textのメソッドで呼び出せる
H1('Test') 

なーんてシンプルに書けたりする。
やっぱMochiKitは参考になるぜ!
(pythonicな思想がいっぱいある)
Lisperにして見ればカリー化なんて多分やって当たり前の話なんだと思うけどね。
うくく。