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