0

Is it possible to make c1.say to show "lalala" without changing M1, M2, C1? I.e., use extra modules to override M2's method? Thanks,

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
4

1 回答 1

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
于 2012-05-17T09:32:11.060 回答