Это сила Fixnum! метод потенциально опасен?

Почему метод power! в классе Fixnum Ruby назван с восклицательным знаком? По соглашению методы, имена которых заканчиваются на ! потенциально опасны (например, они могут каким-то образом модифицировать экземпляр).

Я понимаю разницу между gsub и gsub! в String, но что не так с power!? Похоже, он не изменяет экземпляр Fixnum и не выполняет никаких других «опасных» действий; он просто возвращает результат.


person Jeff    schedule 26.12.2009    source источник
comment
Взрывные методы означают опасность, а не обязательно модификацию. См. stackoverflow.com/questions/ 709229/ (я уберу минус, как только это будет исправлено)   -  person Andrew Grimm    schedule 29.12.2009
comment
Веб-сайт Ruby (ruby-lang.org) ссылается на руководство, в котором конкретно указывается, что методы bang изменяют получателя: rubylearning.com/satishtalim/writing_own_ruby_methods.html. Методы Ruby, которые изменяют объект на месте и заканчиваются восклицательным знаком, называются методами взрыва. Итак... кто прав?   -  person Jeff    schedule 29.12.2009
comment
Ой. Однако позже он говорит, что обычно для встроенных классов опасно (хотя и не всегда) означает, что этот метод, в отличие от его эквивалента без взрыва, постоянно изменяет свой получатель. Я отменю свой отрицательный голос, если вы предоставите пустое редактирование для вопрос (иначе я не могу отменить свой отрицательный голос)   -  person Andrew Grimm    schedule 30.12.2009
comment
Я выбрал средний путь, так как понятия не имею, кто прав. Я думаю, это условность, где опасность может быть чем угодно. Тем не менее, во встроенных классах он до сих пор использовался только в случаях модификации приемника.   -  person Jeff    schedule 30.12.2009


Ответы (1)


Это просто несоответствие в API. Ничего страшного, идем дальше :)

! — это просто соглашение для деструктивных методов не правило.

person rfunduk    schedule 26.12.2009