【问题标题】:How to monkey patch the Ruby module如何给 Ruby 模块打补丁
【发布时间】:2020-06-16 12:37:57
【问题描述】:

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

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

【问题讨论】:

  • “它不起作用”不是一个足够精确的错误描述,我们无法帮助您。 什么不起作用? 如何不起作用?你的代码有什么问题?您收到错误消息吗?错误信息是什么?你得到的结果不是你期望的结果吗?你期望什么结果,为什么,你得到的结果是什么,两者有什么不同?您正在观察的行为不是期望的行为吗?期望的行为是什么,为什么,观察到的行为是什么,它们有何不同?
  • 我没有发现任何问题。当我复制并粘贴您的代码时,我得到了我期望的确切结果,即"monkey patched function1 >>>"

标签: ruby monkeypatching


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多