Как обезьяны пропатчить модуль Ruby - PullRequest
0 голосов
/ 16 июня 2020

У меня есть этот простой ruby модуль. Мне удалось запатчить обезьяну класс Ruby, но на этот раз я хочу запатчить обезьяну простой модуль Ruby. Я пробовал использовать этот подход, но он не работал. Я думал, что он будет работать, потому что он работает, когда я обезьяна исправляю простой Ruby класс.

Mymodule.class_eval do
 def self.function1
   "monkey patched function1 >>>"
 end
end

Это исходный Mymodule, который мы хотим исправить:

module Mymodule
  def self.function1
    'this is function1'
  end 
end

пример использования:
помещает Mymodule.function1 () -> output: this is function1

Есть идеи, как обезьяны исправлять модуль?

1 Ответ

2 голосов
/ 16 июня 2020

Вы можете просто повторно открыть класс и переопределить Mymodule.function1.

module Mymodule
  def self.function1
    'monkey patched function1 >>>'
  end 
end

При этом предложенный вами код тоже работал нормально:

module Mymodule
  def self.function1
    'this is function1'
  end 
end

Mymodule.class_eval do
  def self.function1
    'monkey patched funtion1 >>>'
  end 
end


puts Mymodule.function1
# monkey patched funtion1 >>>
...