0

M1、M2、C1を変更せずにc1.sayに「lalala」を表示させることはできますか?つまり、追加のモジュールを使用して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
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 に答える