Rubyの「破壊的メソッド」 - バリケンのRuby日記 - Rubyist
こちらから。
Rubyのインスタンスメソッドのうち、オブジェクト自身の内容を変えてしまうようなものを「破壊的メソッド」と呼ぶ。
多くの破壊的メソッドには、メソッド名の最後に「!」が付いている。
そしてこれはRubyのコーディング規約にもなっているので、
オブジェクト自身の内容を変更するユーザ定義関数を作成する場合は、
名前の最後に「!」をつけるのが望ましい。
例えば、
a = "abc" def hoge(str) b = str.chop return b end puts a puts hoge(a) puts a
結果は
abc
ab
abc
また、破壊的メソッドを使った例を見てみると、
a = "abc" def hoge!(str) b = str.chop! return b end puts a puts hoge!(a) puts a
こちらの結果は
abc
ab
ab
前者のhoge関数はaの中身を変えないが、
後者のhoge!関数はaの中身を変えてしまう。
スコープの問題か?とも思ったが、
単純に破壊的じゃないメソッドは値のコピーにアクセスしているだけだが、
破壊的メソッドは値の実体をアクセスしているため、オブジェクトの中身そのものが
変わってしまうのが理由のようだ。