From: matz@... (Yukihiro Matsumoto) Date: 1997-11-25T15:10:33+09:00 Subject: [ruby-dev:927] Re: ruby env[ Re: [Req] Proc.new ] まつもと ゆきひろです In message "[ruby-dev:926] Re: ruby env[ Re: [Req] Proc.new ]" on 97/11/25, 石塚圭樹 writes: |けいじゅ@日本ラショナルソフトウェアです. |といっても, メソッドオブジェクトの制約を知らないと... | |どんな制約があるでしょう? まずノードから行きましょう.内部的なメソッドオブジェクトはノー ドの1種ですから. * ノードはGC的にはオブジェクトだが,実際は単なるデータ構造 にすぎない.selfを与えて実行する事ができる * (現状では)クラスを保持するフィールドがない.よってrubyに 手を入れるか他のオブジェクトでラップしないとメッセージが 送れない 次にメソッド(を実装している)オブジェクトです * クラスとの関連は無い * selfとの関連もない * 環境も持っていない メソッド呼出は以下の手順で(rubyで記述された)メソッドを呼び出 しています. * クラスからメソッドオブジェクトを取り出す * frameを用意する.frameにはメソッドが定義されているクラス, 呼び出した時のメソッド名,引数などが格納される(主にsuper の呼出のため) * scopeを用意する.主にscopeはローカル変数のハンドリングに 用いられる * rb_eval(self, node)でメソッドオブジェクトを評価する ですから,オブジェクトとしてはunbound method(メソッドの定義 そのもの)とbound method(selfが固定されているメソッド)があり えるのではないかと思います. |* proc/methodの相互変換 | |は無理ですか? 不可能ではないです.が,ちょっと大変かなあ. |># でも,やっぱり定数のあたりで引っかかるのかなあ. | |定数のundef/再代入ですね. もしできるとすると何か問題になることってある |のですか? 「多用するとわけが分からなくなる」ということ以外には問題は無 いと思うんですけど,自身は無いですねえ. まつもと ゆきひろ /:|)