いちいち function
、return
と書くのは面倒くさいという理由で関数合成・引数束縛に手を染めたわけだけど、「nazonoDiary - DHTMLで子を探す、親を捜す」にてそれでは対応できないパターンを発見。それが以下のパターン (改行はこちらで挿入)。
searchParentByTagName = function(e,tagName){
return searchParent(e,function(n){return tagNameEqual(n,tagName)});
}
内側の function expression を置き換えることはできるんだけど……、
searchParentByTagName = function (e, tagName) {
return searchParent(e, tagNameEquals.bind(_1, tagName));
};
ここから先がうまくいかない。一応無理やりやってやれないこともないのだが……、
searchParentByTagName = searchParent.bind(_1,
"call".bind(tagNameEquals, "bind", new Function.Literal(_1), _2));
きれいでないしあまり短くなった感がしないし何より Function.Literal
という本来裏方に徹しているはずのクラスが表に出てきている。
Function.Literal
を隠すというだけなら _1.literal()
といった表記を導入するという手もあるのだが、そもそもこういった場合どういう表記をしたものか思い浮かばない (boost::bind でこのパターンを表現できるのか?)。やはり言語機能としてラムダ式をもっと簡単に書けるようにしてほしいな。lambda (x) x * x
とか。
コメントをする