4

我需要require从 Ruby 文件中覆盖,这是我的 start.rb 所必需的,它是应用程序入口点。rubygems在此之前加载,在 start.rb 中。

我尝试的一切都给了我一个堆栈溢出错误。

正确的方法是什么?

4

1 回答 1

11

一般来说,如果要修补一些内置方法,首先应该为原始方法创建一个别名。大多数时候,您会在覆盖方法中的某个地方调用旧的。否则,您将失去原始方法的功能,并且可能会破坏应用程序逻辑。

  1. 使用ri require或阅读文档以找出该require方法的定义位置。你会发现它在Kernel模块中。此外,您会找到它的方法签名,以便了解参数列表的样子。
  2. 猴子补丁模块Kernel。除非您知道自己在做什么,否则不要破坏功能。
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'
于 2013-03-27T15:06:43.710 回答