7

我正在尝试对标准库中 Net 类中的一行进行monkeypatch。我在项目的 lib 文件夹中创建了一个名为 patch.rb 的文件并添加了这个

module Net
  class HTTP < Protocol
    module HTTPHeader
      def initialize_http_header(initheader)
        @header = {}
        return unless initheader
        initheader.each do |key, value|
          @header[key.downcase] = [value.strip] rescue ""
        end
      end
    end
  end
end

但它不起作用。我这样做对吗?(这与继承层次结构完全平行。)

编辑:部分问题是我必须将文件放在 initalizers 文件夹中。但仍然看到同样的错误。

4

1 回答 1

10

由于lib/目录中的内容仅按需加载,因此将此类补丁config/initializers/放置在堆栈初始化后自动加载的位置可能会更成功。

您还可以将扩展的定义折叠为如下所示:

module Net::HTTP::HTTPHeader
  # ... (redefined methods) ...
end
于 2011-05-10T20:26:23.103 回答