为什么该方法没有被覆盖?

时间:2012-01-14 04:42:05

标签: ruby

例如我们有:

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的方法?

1 个答案:

答案 0 :(得分:2)

Ruby不允许两次包含一个模块,第二次尝试这样做只是被忽略。

Module#include在{{1}}下使用的Module#append_features文档:

  

Ruby的默认实现是将此模块的常量,方法和模块变量添加到mod中,如果此模块尚未添加到mod或其祖先之一。