如果我将一个模块包含在已定义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} initialize
和M
中的方法?
答案 0 :(得分:2)
看一下这篇博文(http://stdout.koraktor.de/blog/2010/10/13/ruby-calling-super-constructors-from-multiple-included-modules/)。它解释了如何使用来自不同包含模块的initialize
。