在Ruby中调用几个包含模块的'initialize'

时间:2015-09-24 13:52:25

标签: ruby

如果我将一个模块包含在已定义initialize的类中,我可以使用super调用它:

module M
  def initialize(x)
    @m = x
  end
end

class MyClass
  def initialize
    super(3)
  end

  def val
    @m
  end
end

MyClass.new.val
#  => 3

但是,如果我有几个模块,也可能是父类,我该怎么编码?

class Parent
  def initialize(x)
    @p = x
  end
end

module M
  def initialize(x)
    @m = x
  end
end

module N
  def initialize(x)
    @n = x
  end
end

class MyClass < Parent
  include M
  include N
  def initialize
    # ???? How to initialize here?
  end

  def val
    [@m,@n,@p]
  end
end

我想super(100)中的MyClass::initialize会设置变量@n,因为N是“最近的”祖先,但我如何调用{{1} initializeM中的方法?

1 个答案:

答案 0 :(得分:2)

看一下这篇博文(http://stdout.koraktor.de/blog/2010/10/13/ruby-calling-super-constructors-from-multiple-included-modules/)。它解释了如何使用来自不同包含模块的initialize