まつもと ゆきひろです
In message "Re: [ruby-dev:29849] Re: Module duplicate"
on Mon, 6 Nov 2006 10:14:12 +0900, Shugo Maeda <shugo@xxxxxxxxxxxxx> writes:
|Mが2回現れるのは気持ち悪いと思うのですが、
それは主観なんでちょっと置いといて。
# 前田くん向けの説明:
# (コピーしないけど)Satherのinlcudeであると思えば気持ち悪く
# ないかも。
|> 導入の理由は、include したことをしっかりと影響を与えるため(上記例では
|> C2 で M を include したら、C2 のメソッド m より先に M のメソッド m が呼
|> ばれて欲しい、とか)ということです。
|
|ということだと、他の選択肢は
|
|[C2, M, C1, Object, Kernel, BasicObject]
|
|になるのでしょうか。
これはありえないと思います。C1がMに依存してたら動かなくなり
ますから。
|なので、1.8の挙動の方が好ましいような気がするのですが、この変更が原因
|で動かなくなっているコードがないのなら、問題ないのかなあ。
その場合、C2はMを直接includeしたのに、見えるのはC1で「修飾」
されたメソッドになりますよね。overrideとかaliasとかundefとか。
それは嬉しくないんじゃないかなあ。で、このケースだとそうでも
ないんですが、
module M1
end
module M2
include M1
end
module M3
include M1
end
class C1
include M2
end
class C2<C1
include M3
end
のようなケースだと、特にM3とM1の間にいろいろ入ることの嬉しく
なさが目立ちそうです。
で、動かなくなるコードがあるかどうかですが、test/unitの一部
が動かなくなったので、手を入れました。それ以外には大きな問題
は無かったようです。
まつもと ゆきひろ /:|)
|