Соглашение об именах: почему Array # delete не имеет восклицательного знака в конце? - PullRequest
10 голосов
/ 29 февраля 2012

Я изучаю Ruby и вижу, что восклицательный знак в конце имени метода по соглашению означает, что метод каким-то образом изменяет self.Почему тогда Array#delete не заканчивается восклицательным знаком, как slice!, поскольку delete удаляет элемент из self?Я что-то упустил фундаментальное?

Ответы [ 2 ]

15 голосов
/ 29 февраля 2012

Цитировать Матц (главный инженер Руби):

Взрыв (!) Не означает «разрушительный», а отсутствие его означает также и неразрушающий.Знак взрыва означает, что «версия взрыва более опасна, чем ее аналог без взрыва; обращайтесь с осторожностью».

Поскольку Array#delete не имеет менее опасного аналога, нет необходимостивосклицательный знак.

4 голосов
/ 29 февраля 2012

Методы "взрыва" не означают, что он изменяет приемник.Это указание на метод, который является более опасной версией существующего метода.См. описание Дэвида А. Блэка разницы и ответ на запрос об изменении Ruby 2.0.

Это очень распространенное заблуждение.Обратите внимание на очень высоко проголосовавший неправильный ответ здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...