From: SASADA Koichi Date: 2006-11-06T14:13:17+09:00 Subject: [ruby-dev:29857] Re: Module duplicate  ささだです。 Yukihiro Matsumoto wrote: > |# Satherはコピーですし、superもないですからねえ。 > > まあ、そうですね。  Module のメソッドでは super を無くすってのも現実的じゃないですよねぇ。 > |でも同じメソッドが二回呼ばれるのはどうなのかなあ。 > > 同じメソッドが呼ばれるケースはあまり多くないでしょう。  実際にあったケースとして、RSS がありました。 require 'rss' rss_version = '2.0' version = "1.0" encoding = "UTF-8" standalone = false rss = RSS::Rss.new(@rss_version, version, encoding, standalone) p rss.class.ancestors #=> [RSS::Rss, RSS::XMLStyleSheetMixin, RSS::RootElementMixin, RSS::XMLStyleSheetMixin, RSS::RSS09, RSS::Element, RSS::Utils, Object, Kernel, BasicObject] で、XMLStyleSheetMixin#initialize とかが super してます。よくわかんない けど動いてるので、問題はないのかもしれません。  多分、怖いのは気づかない間に同じモジュールを include しちゃって、意図 せずに複数回呼び出してしまう、っていうことだと思います。が、ちゃんと気を つけろってことなのかもしれません。 > となりますから、むしろ二度呼ばれるほうが自然に見えてきません > か? 苦しいかなあ。  自然かもしれません。他の言語の事例、対処なども、もしあれば見てみたいです。 > |強いていえば、ささださんの作業への影響が気になることくらいですが、 > |ささださんも決まってしまえばわりとどっちでもいいんでしょうか。 > > いや、継承ラインに同じモジュールが二度登場するのはかなり致命 > 的らしいですよ。この辺が私としても強く主張しにくいところ。  実装に引きずられないのが Ruby の特徴だと思うので、こうするべき、という 結論になったら直します。ただ、「どっちでもいいけど(どっちがいいかよくわ かんないけど)こっちのほうがいいかも?」とかだったら実装を気にして欲しい なあと言う気がします。 -- // SASADA Koichi at atdot dot net