首页 > 解决方案 > 如何给 Ruby 模块打补丁

问题描述

我有这个简单的 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

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

关于如何修补模块的任何想法?

标签: rubymonkeypatching

解决方案


您可以简单地重新打开课程并重新定义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 >>>

推荐阅读