我不明白为什么会这样。
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
super 在这里实际上做了什么?它从 Base 模块调用 setup 方法,即使 Base 和 Addon 不相关。
这是我第一次在模块的上下文中使用 super。以前我总是对类使用超级调用,并认为它只是在继承树上找到具有相同方法的父级。
包含多个模块是否也设置了某种继承树?
编辑:就上下文而言,如果没有 Base 模块,就永远不会包含 Addon 模块,并且 Base 模块将始终包含在任何其他 Addon 模块之前。