ruby - 如何给 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
关于如何修补模块的任何想法?
解决方案
您可以简单地重新打开课程并重新定义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 >>>
推荐阅读
- node.js - 如何将值从 React 文件传递给变量到节点服务器文件
- c# - 我正在尝试查找字符串 s1 是否为回文,反转字符串并将其保存在 s2 中,现在 s1==s2 ,在这里我永远不会正确
- java - 发送批量通知,想决定调度器的时间频率
- azure - 用于部署事件网格的 Azure devops 管道,其中包含来自 2 个不同 azure 订阅的资源
- javascript - 在 jQuery 数据表中看不到 PDF 按钮
- python - 为什么我的 python tkinter 图形在连接到 mysql 数据库时不能在 pycharm 之外运行
- java - 如何在redis缓存java中存储非持久java对象
- flutter - 如何在 FLUTTER 中设置一个按钮以重定向到我的地图?
- android - 如何在android studio中为意图创建公共类方法
- angular - 非相关组件之间使用 EventEmitter 进行通信