2013-03-27 42 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'