関数合成の野望ついえたり ― 2006年05月18日 02時57分
いちいち 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
とか。
コメント
トラックバック
このエントリのトラックバックURL: http://nanto.asablo.jp/blog/2006/05/18/369768/tb
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※投稿には管理者が設定した質問に答える必要があります。