[SML 7315] Re: ブロック生成のメタプログラミング

Masato Sumi sumi @ seagreen.ocn.ne.jp
2007年 9月 12日 (水) 01:30:22 JST


ご無沙汰しております。鷲見です。

07/09/06 に AOKI Atsushi<aoki @ sra.co.jp> さんは書きました:
> 伝言選択子(メッセージ・セレクタ)シンボルに対して用いるのが
> 適切です。使い方は以下のようになります。

面白い試みですね。ただちょっと疑問に思ったのでお伺いしたいのですが、
ブロックをその都度生成する意義というのはどういうところにあるのでしょうか。

たとえば Symbol に次のような振る舞いの #value: 、#value:value: を
定義しても、同じようなことは可能だと思うのです。

Symbol >> value: anObject
    ^anObject perform: self

Symbol >> value: anObject value: argument
    ^anObject perform: self with: argument

(1 to: 10) select: #even    "=> #(2 4 6 8 10) "
#(a b c) with: #(1 2 3) collect: #->   "=>  {#a->1 . #b->2 . #c->3} "
(1 to: 10) inject: 0 into: #+   "=> 55 "


自分なりに考えてみたところでは、実際にブロックを生成することで、通常、
ブロックを引数に取るメソッド呼び出しのシグネチャのようなものを変えないため…、
あるいは、シンボルがセレクタとしてまだ機能しないときの遅延処理のため…、
といったものを思いつきましたが、他にもあれば教えていただければ幸いです。


なお、#asBlockFor: のほうは、ある種のカリー化なので、ブロックをアドホックに
生成する意義は大いにあると分かります。

-- 
Masato Sumi



SML メーリングリストの案内