我需要从一个 Ruby 文件中覆盖 require
,我的 start.rb 需要它,它是应用程序入口点。 rubygems
在此之前加载,在 start.rb 中。
我尝试的一切都给我一个堆栈溢出错误。
正确的做法是什么?
最佳答案
一般来说,如果你想给一些内置方法打补丁,你应该先给原来的方法起一个别名。大多数时候,您会在覆盖方法的某处调用旧方法。否则,您将失去原始方法的功能,并且很可能会破坏应用程序逻辑。
- 使用
ri require
或阅读文档找出定义require
方法的位置。您会发现它位于Kernel
模块中。此外,您会找到它的方法签名,这样您就知道参数列表是什么样子的。 - Monkey 补丁模块
内核
。 不要破坏功能,除非您清楚自己在做什么。
module Kernel
# make an alias of the original require
alias_method :original_require, :require
# rewrite require
def require name
puts name
original_require name
end
end
# test the new require
require 'date'
关于ruby - 如何覆盖 Ruby 中的要求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15661788/