From: Shugo Maeda Date: 2006-11-06T10:14:12+09:00 Subject: [ruby-dev:29849] Re: Module duplicate 前田です。 SASADA Koichi wrote: >  いつのまにか 1.9 では Module を include したとき、ancestors に同じモ > ジュールが重なるようになっていました。 (snip) > 1.9 : [C2, M, C1, M, Object, Kernel, BasicObject] > M が2回現れる > ######################## > >  結構大きな変更だと思うのですが、この仕様について何か意見がある方はいま > せんか。 Mが2回現れるのは気持ち悪いと思うのですが、 >  導入の理由は、include したことをしっかりと影響を与えるため(上記例では > C2 で M を include したら、C2 のメソッド m より先に M のメソッド m が呼 > ばれて欲しい、とか)ということです。 ということだと、他の選択肢は [C2, M, C1, Object, Kernel, BasicObject] になるのでしょうか。 >  が、個人的には同じメソッドが super によって 2 回以上呼ばれてしまうのは > どうかな、と思っています。呼ばれても然るべき? 私も2回以上呼ばれるのはちょっとどうかなと思います。 ただ、 [C2, M, C1, Object, Kernel, BasicObject] みたいな順番にすると、C1がMのメソッドをsuperで呼ぶことを意図していた 場合に動作しなくなりそうですね。 なので、1.8の挙動の方が好ましいような気がするのですが、この変更が原因 で動かなくなっているコードがないのなら、問題ないのかなあ。 -- 前田 修吾