我正在用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
方法?
我会简单地使用method_defined?
。
就像在这个例子中:
# sum implementation for Ruby below 2.4
unless Enumerable.method_defined? :sum
module Enumerable
def sum(init = 0)
inject(init, :+)
end
end