Ruby 在gem中使用模块的Monkey补丁

Ruby 在gem中使用模块的Monkey补丁,ruby,rubygems,Ruby,Rubygems,我正在构建一个RubyGem,其中包含一个模块,该模块旨在对Hash类进行猴子补丁,以添加一个新方法。我遵循本指南,力求做到整洁: 我已将该模块放置在lib/core\u extensions/hash/prune.rb中,该模块声明如下: module CoreExtensions module Hash module Prune ## # Removes all pairs from the Hash for which the value is nil.

我正在构建一个RubyGem,其中包含一个模块,该模块旨在对Hash类进行猴子补丁,以添加一个新方法。我遵循本指南,力求做到整洁:

我已将该模块放置在
lib/core\u extensions/hash/prune.rb
中,该模块声明如下:

module CoreExtensions
  module Hash
    module Prune
      ##
      # Removes all pairs from the Hash for which the value is nil. Destructive!
      def prune!
        self.reject! { |_, v| v.nil? }
      end
    end
  end
end
为了让monkey补丁生效,我在主gem文件中调用:

Hash.include(CoreExtensions::Hash::Prune)
但是在构建gem并尝试在irb控制台中请求它之后,我得到了以下错误:
NameError:uninitialized constant gem::CoreExtensions
(gem是一个占位符名称)

我确保将prune.rb文件包含在我的gempec的
文件
数组中:
s.files=['lib/gem.rb','lib/core\u extensions/hash/prune.rb']
,所以我不确定为什么它不能检测到该文件及其模块。有人能帮我弄清楚吗

谢谢大家!


编辑:以防对其他人有帮助-我尝试使用
要求'lib/core\u extensions/hash/prune'
要求模块文件,但收到了“无法加载此类文件”错误。将
/
粘贴在路径前面将其固定。

irb
控制台中,您是否记得
要求
定义模块的文件?我没有-但现在您提到了它,我尝试要求主
gem.rb
文件中的文件,但失败,出现
无法加载此类文件的错误。不过,我稍微调整了一下语句:
require./lib/core\u extensions/hash/prune'
,现在它似乎可以工作了!加载文件后,是否按预期工作?如果再次出现
namererror
错误,请仔细检查输入错误并确保控制台中的名称空间与模块文件中定义的名称空间匹配。另外,如果您仍然被卡住,请复制并粘贴您的(占位符化的)
irb
历史记录。请务必检查是否有一个已经定义了该名称的方法,因为Ruby core会不时升级,并且一个简单的名称可能会发生冲突。这是一个很好的提示,@tadman,谢谢。在
irb
控制台中,您是否记得
require
定义模块的文件?我没有-但现在您提到了它,我确实尝试在主
gem.rb
文件中要求该文件,但失败了,出现了
无法加载此类文件的错误。不过,我稍微调整了一下语句:
require./lib/core\u extensions/hash/prune'
,现在它似乎可以工作了!加载文件后,是否按预期工作?如果再次出现
namererror
错误,请仔细检查输入错误并确保控制台中的名称空间与模块文件中定义的名称空间匹配。此外,如果您仍然被卡住,请复制并粘贴您的(占位符化的)
irb
历史记录。请务必检查是否存在已定义该名称的方法,因为Ruby core会不时升级,而这样简单的名称可能会发生冲突。这是一个很好的提示,@tadman,谢谢。