Поиск…


замечания

Патч обезьяны, хотя и удобен, имеет некоторые подводные камни, которые не сразу очевидны. В частности, патч, подобный этому примеру, загрязняет глобальную область. Если два модуля добавляют Hash#symbolize , то только последний модуль должен применить его изменение; остальные стираются.

Кроме того, если есть ошибка в исправленном методе, stacktrace просто указывает на исправленный класс. Это означает, что есть ошибка в самом классе Hash (который есть сейчас).

И, наконец, поскольку Ruby очень гибкий в отношении того, какие контейнеры держать, метод, который кажется очень простым, когда вы пишете его, имеет множество неопределенных функций. Например, создание Array#sum полезно для массива чисел, но ломается при задании массива пользовательского класса.

Более безопасная альтернатива - это уточнения, доступные в Ruby> = 2.0.

Добавление функциональности

Вы можете добавить метод в любой класс в Ruby, независимо от того, является ли он встроенным или нет. Вызывающий объект ссылается на self .

class Fixnum
  def plus_one
    self + 1
  end

  def plus(num)
    self + num
  end

  def concat_one
    self.to_s + '1'
  end
end

1.plus_one # => 2
3.plus(5) # => 8
6.concat_one # => '61'


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow