В общем, методы, которые заканчиваются на !
, указывают, что метод будет изменить объект, который он вызвал на. Ruby называет их «опасных методов», потому что они меняют состояние, что у кого-то может быть ссылка. Вот простой пример для строк:
foo = "A STRING" # a string called foo
foo.downcase! # modifies foo itself
puts foo # prints modified foo
Этот выход будет:
a string
В стандартных библиотеках, есть много мест, где вы увидите пары одноименных методов, один с !
и один без. Без них называются «безопасные методы», и они возвращают копию оригинала с изменениями, внесенными в , копия, с указанием неизменной. Вот тот же самый пример без !
:
foo = "A STRING" # a string called foo
bar = foo.downcase # doesn't modify foo; returns a modified string
puts foo # prints unchanged foo
puts bar # prints newly created bar
Это выходы:
A STRING
a string
Имейте в виду, что это всего лишь условность, но много классов Ruby, следовать за ним. Это также помогает вам отслеживать, что изменяется в вашем коде.
синоним: взрыв, восклицательный знак – prusswan
Принятый ответ должен быть изменен на http://stackoverflow.com/a/612653/109618. См. Http://www.wobblini.net/bang.txt и http://www.ruby-forum.com/topic/176830#773946 - «Знак взрыва» означает, что версия бэнга более опасна, bang counterpart; обращайтесь с осторожностью »« -Matz –
Метод взлома будет отличным выбором дизайна, если ** только ** и ** все ** bang-методы были опасны. К сожалению, это не так, и поэтому это становится расстраивающим упражнением по запоминанию того, что есть и не изменяет. –