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

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


青木さん、西原さん、ありがとうございます。鷲見です。

> 鷲見さんからも厳しいツッコミをいただきました.m(_ _)m

あ…、スミマセン。慣れない Web メールアプリを使っていたら、ML への
返信のつもりが直メールになっていたようです。お気を悪くされたら、ごめんなさい。
他意はありません。


07/09/12 に NISHIHARA Satoshi<nishis @ zephyr.dti.ne.jp> さんは書きました:
> enumerating カテゴリのパラメータ=ブロックと

そうした「思いこみ」を裏切らないために、ただシンボルを渡すのではなく
シンボルに asBlock メッセージを送って返る値がブロックであることを
陽にすることはコードの読みくだしのしやすさを確保するのにもきわめて大事な
ことなのだとあらためて実感できます。w

じつはこのシンボルをブロックの代わりに受け渡すスタイルは、OS X 向けの
Smalltalk ライクな F-Script という言語(の初期)や Ruby で重宝がられているのを見て
そのアイデアを知ったのですが、記述をシンプルにできて便利なのは分かっても、
何かこう「気持ちの悪さ」のようなものを払拭できずにいたところなのでした。
(わざわざ持ち出してきておいてこういうのも無責任なはなしですが…}

青木さんや西原さんのお話をいろいろとうかがっているうちに、
その違和感の正体が何なのかがだんだん分かってきたような気がします。
今回のウリであるメタプログラミングとは関係ない個人的な興味のことで
申し訳ありませんでした。


Symbol>>#value: についてのコメントがあったというブログのエントリーも
読みました(このエントリーでは #asBlock をメタプログラミングを使わずに
実装してしまっているようですが、まあそれはおいておくとして)。この最後で、

> In contrast, asBlock is a uniform mechanism to cross over from
> the domain of selectors to the domain of blocks equivalent to
> those selectors sent to the block's first argument.

とあるのがナルホドなーと思いました。Symbol のほうでも実際は #value: と
#value:value: の二つを用意しておきさえすれば、ほぼ用は足りるわけですが、
それでも理屈では引数の数だけメソッドを用意しないといけないという状況は
青木さんのおっしゃる醜悪な状況と似て、いかにも美しくありません。

-- 
Masato Sumi



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