Разница между нижним регистром и нижним регистром! в рубине - PullRequest
11 голосов
/ 02 апреля 2009

Я только изучаю Ruby и не совсем понимаю разницу между несколькими методами Ruby с и без '!' в конце. Какая разница? Зачем мне использовать один над другим?

Ответы [ 2 ]

33 голосов
/ 02 апреля 2009

Методы с восклицательным знаком в конце часто называются bang-методами. Метод взрыва не обязательно изменяет свой получатель, так как нет гарантии, что методы без восклицательного знака не делают.

Все это очень хорошо объяснено в этом блоге . Цитировать пост:

The! в именах методов, которые заканчиваются на! означает «Этот метод опасен» - или точнее, этот метод является «Опасная» версия иначе эквивалентный метод, с тем же именем минус! «Опасность» относительна; ! ничего не значит вообще, если имя метода в котором соответствует похожее, но безударное имя метода.

и

The! не означает «этот метод меняет свой приемник. ”Много «Опасные» методы меняют свои приемников. Но некоторые этого не делают. Я повторяю: ! не означает, что метод меняется его приемник.

12 голосов
/ 02 апреля 2009

Метод non-bang downcase () просто возвращает новый объект, представляющий строку в нижнем регистре.

Версия взрыва изменяет вашу строку.

my_text = "MY TEXT"
my_new_text = my_text.downcase
puts my_new_text # will print out "my text"
puts my_text     # will print out "MY TEXT" - the non-bang method doesn't touch it

my_text.downcase!

puts my_text # will print out "my text". The bang version has modified the object you're calling the method on
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...