Ruby 如何仅在没有';还不存在

Ruby 如何仅在没有';还不存在,ruby,Ruby,我用Ruby编写了一个脚本,意识到我需要使用Enumerable#sum方法。然而,这种方法只存在于Ruby2.4和更高版本中,我有2.2 所以我可以自己添加这个方法,就像这样 module Enumerable def sum(init = 0, &block) block ||= lambda { |x| x } map(&block).inject(init, :+) end end 但如果我在有足够高版本Ruby的pc上运行脚本,我的实现将覆盖标

我用Ruby编写了一个脚本,意识到我需要使用
Enumerable#sum
方法。然而,这种方法只存在于Ruby2.4和更高版本中,我有2.2

所以我可以自己添加这个方法,就像这样

module Enumerable
  def sum(init = 0, &block)
    block ||= lambda { |x| x }
    map(&block).inject(init, :+)
  end
end
但如果我在有足够高版本Ruby的pc上运行脚本,我的实现将覆盖标准库中的脚本


当且仅当
可枚举#和
方法不存在时,我如何实现该方法?

我将简单地使用
方法定义?

如本例所示:

# sum implementation for Ruby below 2.4
unless Enumerable.method_defined? :sum
  module Enumerable
    def sum(init = 0)
      inject(init, :+)
    end
end

我会简单地使用
方法定义?

如本例所示:

# sum implementation for Ruby below 2.4
unless Enumerable.method_defined? :sum
  module Enumerable
    def sum(init = 0)
      inject(init, :+)
    end
end

你应该看看马克·安德烈·拉福琼的宝石!只需要你感兴趣的方法,例如
需要'backports/2.4.0/enumerable/sum'
就可以了。如果您对内部工作方式感兴趣,请参见–除非定义了方法,否则这里只有一个
:方法结束后求和
;那不是很美吗?你应该看看马克·安德烈·拉福琼的宝石!只需要你感兴趣的方法,例如
需要'backports/2.4.0/enumerable/sum'
就可以了。如果您对内部工作方式感兴趣,请参见–除非定义了方法,否则这里只有一个
:方法结束后求和
;那不是很美吗?