moochan です.

On Mon, 8 Mar 1999 18:50:55 +0900
matz / netlab.co.jp (Yukihiro Matsumoto) wrote:

>Proc.newなどでオブジェクト化されてはじめてブロックオブジェク
>トになりますからね.が,「必要なら何度も繰り返し評価されま
>す」ってのはどちらも同じでしょう?

ええ.確かに手続きオブジェクトとSmallalkのブロックはよく似ています.
でも今話題にしているのは,手続きオブジェクトではなくイテレータです.
イテレータとSmalltalkのブロックは同じとは思えません.

# イテレータ != 手続きオブジェクト ですよね.


>|さらに,私の感覚では,Rubyの場合,オブジェクトの内臓を手でえぐりだして
>|処理し元へ戻すと言うような,あまり美しいイメージを持っていません.
>
>ふーむ,「内蔵をえぐりだす」とはおだやかでないイメージですね.

表現が過激でしたね.すみません.(^^;;;

>それってRubyのブロックがそういうイメージがあるってことですか?

イテレータは本来レシーバに任せるべき手続きをセンダー側で定義し実行し
てしまう機能ですよね.そのとき対象となるオブジェクトはレシーバから取
ってくるイメージがあります.そういう意味で先の過激な印象になってしま
ったんですね.
似たようなことはSmalltalkでもブロックとして実装されますが Smalltalk
のブロックは定義はセンダー側で行いますが実行はあくまでもレシーバ側で
す.そう言う意味でオブジェクト指向のルールを一応守っていると言えます.

# 苦し紛れの言い訳みたいですが > Smalltalk

それから Smalltalk のブロックは,レシーバからの独立性が高いですがイ
テレータの場合低いように思います.
用途の違いも顕著です.イテレータはコレクション系クラス,Smalltalkの
ブロックは Boolean オブジェクトへのセレクタメッセージとしてよく用い
られます.

# でも正直なところイテレータって大変便利なのでうれしい(^^)


>|ただ,長所と言うか特徴としては,レシーバのクラス定義へ戻らなくてよい,
>
>これはSmalltalkもRubyも両方そうなのでは? 両方とも現在のコン

定義と言う意味では同じでしょうね.ただ評価する場所は異なりますが.

>テキストを保持してますから.ま,Rubyには例外的にコンテキスト
>を変更してブロックを評価するメソッドがいくつかありまして,そ

「コンテキストを変更してブロックを評価するメソッド」の具体的なイメージが
湧かないのですが,アセンブラやCでよくやるコードでコードを書き換えるってや
つですか?

---
(^。^)(^・^)(^-^)(^ム^)	〜 moochan / ss.hitachizosen.co.jp