From: "U.Nakamura" Date: 2008-08-27T14:45:38+09:00 Subject: [ruby-dev:36004] Re: 1.9と1.8で、delegateのインスタンスのクラス名の違う こんにちは、なかむら(う)です。 たぶん石塚さんとほぼ同じ意見なんだと思いますが... In message "[ruby-dev:35998] Re: 1.9と1.8で、delegateのインスタンスのクラス名の違う" on Aug.27,2008 12:24:22, wrote: > 後者は, self.class で元クラスを返す方法もありますが, 別のメソッドを用 > 意するでも良いと思います. この場合は, 当然, kind_ofやancestors等の振る > 舞いを変える必要はないです. ちょっとここがよくわかりませんでした。 * self.classで元クラスを返す場合 → kind_ofやancestorsをいじらなくても、扱う側はまるで元ク ラスそのものであるかのように扱える。 * self.classで自クラスを返す場合 → もし継承されているかのように扱いたいならば、kind_ofや ancestorsをいじる必要がある。 また、別途、元クラスを取得するメソッドを用意する必要も あるだろう。 と、いう意味でいいでしょうか? で、RubyのDelegatorはどうあるべきか、ですが、私は後者である方 がいいのではないかと思います。 継承のように扱いたいなら継承を使えばいいんだし。 Rubyの場合はダックタイピングが使えますから、継承関係になくて も同名メソッドは呼び出せるわけで、元クラスとクラス名が違った り擬似的親子関係になくても用が足りる場面は多いはずですし、む しろそういう場面のために委譲が使用されるべきでしょう。 また、どうしても親子関係を偽装したければ、自前でkind_ofやancestors をいじればそれも実現可能なわけで、後者としても逃げ道は残され ることになります。 というわけで、classに関しては、敢えて1.8の挙動を変更する必要 はないと思います。 それでは。 -- U.Nakamura