如何在Ruby中覆盖require?

时间:2013-03-27 14:45:41

标签: ruby

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

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

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:7)

通常,如果要修补某些内置方法,则应首先为原始方法创建别名。大多数情况下,你会用最重要的方法在某处调用旧的。否则你将失去原始方法的功能,并且可能会破坏应用程序逻辑。

  1. 使用ri require或阅读文档以了解require方法的定义位置。你会发现它在Kernel模块中。此外,您将找到其方法签名,以便您知道参数列表的外观。
  2. Monkey patch模块Kernel不要打破功能,除非你知道自己在做什么。
  3. 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'