例如我们有:
module X
def test
"X"
end
end
module Y
def test
"Y"
end
end
class L
include X
end
L.new.test #=> "X"
class L
include Y
end
L.new.test #=> "Y"
class L
include X
end
L.new.test #=> "Y"
这是奇怪的事情。为什么最后一个包含没有将方法更改为X的方法?
答案 0 :(得分:2)
Ruby不允许两次包含一个模块,第二次尝试这样做只是被忽略。
由Module#include
在{{1}}下使用的Module#append_features文档:
Ruby的默认实现是将此模块的常量,方法和模块变量添加到mod中,如果此模块尚未添加到mod或其祖先之一。