String#replace

[ruby-list:44038]を読んで、String#replaceという破壊的なメソッドを知る。

a = 'hyuki'
b = a
a.replace 'rubyco' # 破壊的
puts a, b

c = 'hyuki'
d = c
c = 'rubyco'       # 非破壊的
puts c, d

実行結果です。

rubyco
rubyco
rubyco
hyuki

String#replaceはStringオブジェクトが保持している文字列データを置き換えます。一方代入演算子(=)による代入は変数の値を書き換える(変数が別のオブジェクトを指すようになる)だけであって、オブジェクトが保持しているオブジェクトを書き換えるわけではありません。