Ruby 如何为gem创建模块?

Ruby 如何为gem创建模块?,ruby,module,rubygems,monkeypatching,Ruby,Module,Rubygems,Monkeypatching,我正在创建一个图形库gem 在创建gem时,确保与其他gem或其他代码没有冲突似乎很重要 例如,从我的gem代码中调用扩展(monkeypatch)方法 class Array def sum inject(0.0) { |result, el| result + el } end 因此,解决方案似乎是一个模块 如何创建一个模块并确保在其他人下载和使用gem时与其他代码没有冲突?您只需这样做。创建一个模块,并使用它: module MyLibrary class MyG

我正在创建一个图形库gem

在创建gem时,确保与其他gem或其他代码没有冲突似乎很重要

例如,从我的gem代码中调用扩展(monkeypatch)方法

class Array
  def sum
    inject(0.0) { |result, el| result + el }
  end
因此,解决方案似乎是一个模块


如何创建一个模块并确保在其他人下载和使用gem时与其他代码没有冲突?

您只需这样做。创建一个模块,并使用它:

 module MyLibrary
   class MyGraphicsClass
     # ...
   end
 end

这并不能阻止你的猴子补丁踩到别人的脚趾。无法防止您对数组的修改可能会破坏其他人的代码。解决办法是不要这样做。修补标准库的基本部分是一种可怕的做法,也是确保没有人想碰你的宝石的好方法。

如果你只是想将模块混入核心类,那么创建一个模块对你没有帮助。您应该避免修补核心类。好的,那么实现Array#sum功能的更好方法是什么呢?子类Array并使用您的子类。但是,我假设您所做的事情比#sum更复杂,因为这只是
arr.reduce(:+)