如何猴子修补 Ruby 模块

How to monkey patch the Ruby module

我有这个简单的 ruby 模块。我能够猴子修补 Ruby class 但这次我想猴子修补一个简单的 Ruby 模块,我尝试使用 这种方法但没有奏效。我认为它会起作用,因为当我猴子修补一个简单的 Ruby class.

时它会起作用
Mymodule.class_eval do
 def self.function1
   "monkey patched function1 >>>"
 end
end

这是我们想要猴子补丁的原始 Mymodule:

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

示例用法:
puts Mymodule.function1() -> 输出:这是 function1

知道如何给模块打补丁吗?

您只需重新打开 class 并重新定义 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 >>>