池田孝志です。

Kazuhiro Nishiyama <nishiyama / mx1.tiki.ne.jp> writes:

> こんばんは、ZnZです。
> 
> 以下のように複数のmoduleをincludeするとsuperで後の方のmoduleの
> initializeしか呼ばれないようですが、M1のinitializeが呼ばれる
> ようにするにはどうするのでしょうか?

> class C
>   include M1
>   include M2
> 
>   def initialize(s)
>     super(s)
>   end
> end

alias で以前定義したメソッドを指すようにします。

class C
  include M1
  alias :init1 :initialize
  include M2
  alias :init2 :initialize

  def initialize(s)
    init1(s)
    init2(s)
  end
end

同じ名前のメソッドがincludeされるというのなら、あえて super
は利用しないようにするほうが良いのではと思います。

名前が衝突してしまうのが分かっている場合は、元からモジュール
にも別名を(後から alias に頼るわけではなく)命名しておいたほ
うがよさそうです。

-- 
池田 孝志  cercine / kcn.ne.jp