From: "U.Nakamura" Date: 2008-09-03T09:27:15+09:00 Subject: [ruby-dev:36113] Re: 1.9と1.8で、delegateのインスタンスのクラス名の違う こんにちは、なかむら(う)です。 In message "[ruby-dev:36103] Re: 1.9と1.8で、delegateのインスタンスのクラス名の違う" on Sep.02,2008 20:33:41, wrote: > > あ、kind_of?で見てたら継承じゃなくて委譲を使われていたから > > 動かなかったよ。 > > ここはrespond_to?でメソッドを呼べるかチェックすべきだったん > > だなあ。 > >という方向に行くことを期待したいのですが、ダメですかね。 > > これが正しい方向かも. > > rubyってタイプスイッチを構文的にサポートしている感じなので, つい使って > しまいがちですよね. あれっていうのは, duck type 的にはあまりよろしくな > かったのかもしれませんねぇ. 継承は言語仕様の一部なのに対し、委譲はライブラリで実現してる ので、仕方ない感じはありますが... > ただ, > > case obj > when Klass > > とか, kind_of?にしても, 継承関係を聞いているのではなく, 実はまとめて > resopnd_to?したい場合が多い気がするので, それを判断する専用のメソッド > があると良いかもしれません. そういえば、委譲でkind_of?がtrueになるのは今までの理由で許し たくないのですが、===はtrueになっても許せる気がします。 でも、===だけ使えるようになっても、単に混乱するだけで嬉しくは ないですかね。 > obj.same_response?(mod) > > とか, > > case obj > when same_response(mod) > .... > > とかね. respond_to?で引数に配列が取れるようになると、まとめて判定でき て便利、とか。 それでは。 -- U.Nakamura