2013-03-27 43 views
3

我需要从一个Ruby文件中覆盖require,这是我的start.rb(应用程序入口点)所必需的。在start.rb中,在此之前加载了rubygems如何在Ruby中覆盖require?

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

什么是正确的做法?

+0

你为什么要这么做?你为什么需要它? – 2013-03-27 14:47:44

+1

没有正确的方法来做到这一点。你不应该。 – 2013-03-27 14:48:29

+1

Rubygems做到了,为什么我不应该这样做? – guai 2013-03-27 14:49:31

回答

7

一般来说,如果你想修补一些内置的方法,你应该先为原始方法制作一个别名。大多数情况下,你会在你的压倒一切的方法的某个地方调用旧的。否则,您将失去原始方法的功能,并且很可能会破坏应用程序逻辑。

  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'