仅在尚不存在的情况下如何实现方法

时间:2018-09-20 14:12:31

标签: 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

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

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

1 个答案:

答案 0 :(得分: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