ruby - 仅当方法不存在时如何实现它

标签 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 的电脑上运行脚本,我的实现将覆盖标准库中的脚本。

当且仅当 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

关于ruby - 仅当方法不存在时如何实现它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52427168/

相关文章:

arrays - 迭代并映射多维数组

ruby-on-rails - 在模型类方法上运行辅助方法

ruby-on-rails - 尝试让经过身份验证的用户首先登陆他们的个人资料页面而不是 home#index - 使用 Devise

ruby-on-rails - 如何在 Rails 3 中为哈希中的变量应用 attr_accessor

ruby - 如何解析抓取的 JSON 字符串

ruby - 检查 Object 是否为 nil 并且所需的属性是否为 nil 或为空

ruby-on-rails - 为什么我的模型的唯一性验证规范在应该通过时却失败了?

regex - 替换@之前的所有字符

javascript - 有没有等同于 Ruby 的 Object#tap 的 jQuery?

ruby-on-rails - Rails 错误表单字段验证 CSS 和语义 UI