18
我不明白为什么这个工作。Ruby:模块和超级?
module Base
attr_reader :first
def setup
@first = 1
end
end
module Addon
attr_reader :second
def setup
#super
@second = 2
end
end
class Test
include Base
include Addon
def initialize(num)
@num = num
setup
end
end
a = Test.new(1)
p a.first
p a.second
基本上我有一个“基地”模块,它设置了一些东西。我还有一个插件模块,如果某个类想要包含它,它将设置更多内容。
现在,当我测试了一下,如果我没有那个超打电话给我们,我得到
nil
2
当我有超级电话,我得到
1
2
什么超级实际上做在这里做?它调用基本模块的设置方法,即使Base和Addon不相关。
这是我第一次在模块上下文中使用super。以前,我一直使用类的超级调用,并认为它只是继承树上找到一个父方法相同。
是否包含多个模块还设置某种继承树?
编辑:用于上下文中,附加模块将永远不会被包括而不基本模块,并且基座模块将总是被包括任何额外的附加模块之前。
我认为你是对的。方法签名可能存储在堆栈中,超级只是将消息分派到堆栈中更深处的对象。有趣的发现我会说! – Candide 2012-07-09 22:05:56