如何在ruby中调用一系列模块中定义的超级方法

时间:2012-05-17 09:25:58

标签: ruby methods module super

是否可以让c1.say显示“lalala”而不改变M1,M2,C1?即,使用额外的模块来覆盖M2的方法?谢谢,

module M1
  def word
    "lalala"
  end
end

module M2
  def word
    super + 'wawawa'
  end
end

class C1
  include M1
  include M2
  def say
    puts word
  end
end

c1 = C1.new
c1.say # lalalawawawa

1 个答案:

答案 0 :(得分:2)

您可以随时修改任何类,而无需更改其原始代码。

module M1
  def word
    "lalala"
  end
end

module M2
  def word
    super + 'wawawa'
  end
end

class C1
  include M1
  include M2
  def say
    puts word
  end
end

# patch M2
M2.class_eval do
  def word
    super
  end
end

# or patch C1
# C1.class_eval do
#   def word
#     'lalala'
#   end
# end


c1 = C1.new
c1.say
# >> lalala