Как реализовать метод, только если он еще не существует - PullRequest
0 голосов
/ 20 сентября 2018

Я писал скрипт на 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 тогда и только тогда, когда он не существует?

1 Ответ

0 голосов
/ 20 сентября 2018

Я бы просто использовал method_defined?.

Как в этом примере:

# sum implementation for Ruby below 2.4
unless Enumerable.method_defined? :sum
  module Enumerable
    def sum(init = 0)
      inject(init, :+)
    end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...