From: shugo@... (Shugo Maeda) Date: 1997-12-19T17:39:02+09:00 Subject: [ruby-dev:1157] Re: Object#bind 前田です。 In message "[ruby-dev:1155] Re: Object#bind" Yukihiro Matsumoto wrote: |でも,selfのクラスとメソッドが仮定しているselfのクラスが食い |違っちゃうので,selfに対するメソッド呼出とかがうまくいかない |可能性は高いですね.とはいえ,これは自分の責任だということに |なると思いますが. あと再帰呼び出ししている場合も元のメソッドをオーバーライドすると まずそうですが,これはaliasでも同じですね。 |それと,やはりメソッドの仮定しているオブジェクト構造と実際の |オブジェクト構造の食い違いの問題は残りますね. | |もし,仮にUnboundMethodを採用するにしても,上のふたつの問題 |からある程度の制限がつくと思いますが,それはどの程度のものな |ら許容できるのか,あるいはそもそもUnboundMethodは必要なのか, |という点についてもう少し考察する必要がありそうです. Cで記述されたクラスのメソッドは取り出せない,という制限は それほど気にならないのですが,UnboundMethodは必要か,とい うと難しいですね。 BoundMethod/UnboundMethodと分けるのは止めて,石塚さんのイ メージするBoundMethodのようなものをMethodという名前で用意 しておけば,十分かもしれません。 例えば, ------------- Module#method(mid) メソッドを取り出す。 Method#defined_class メソッドが定義されているクラスを返す。 Method#name メソッドの名前を返す。 Method#invoke(recv, ...) recvをレシーバとしてメソッドを呼び出す。 method.invoke(recv)とした時,recv.kind_of?(method.defined_class)が 真でない場合はIllegalReceiverErrorをraiseする。 クラスにMethodのインスタンスをメソッドとして追加するメソッドは 用意しない。 -------------- という案はどうでしょう。 -- 前田 修吾