仅当方法尚不存在时,如何实现该方法

Duš*_*ský 1 ruby

我在Ruby中编写脚本并意识到我需要使用该Enumerable#sum方法.但是,该方法仅存在于Ruby 2.4及更高版本中 - 我有2.2.

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

module Enumerable
  def sum(init = 0, &block)
    block ||= lambda { |x| x }
    map(&block).inject(init, :+)
  end
end
Run Code Online (Sandbox Code Playgroud)

但是如果我在具有足够高版本Ruby的PC上运行脚本,我的实现将覆盖标准库中的那个.

Enumerable#sum当且仅当它不存在时,我该如何实现该方法?

tuk*_*kan 7

我会简单地使用method_defined?.

就像在这个例子中:

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