replace
は ! はついてませんが 破壊的メソッド です。
これはオブジェクトを共有している時に変化が出てきます。
例えば、次のように定義すると str, str2 は同じオブジェクトを指します。
lang
1str = str2 = "foo"
2# str → "foo" ← str2
ここで replace を使わない場合は、 新しいオブジェクトを作り str が指しているオブジェクトを変える ので、 str2 の方は変化しません。
lang
1str = str2 = "foo"
2str = "bar"
3p str # "bar"
4p str2 # "foo"
5
6# "foo" ← str2
7# str → "bar"
しかし、 replace
を使うと、 オブジェクトの中身を変える ので、 str2 の方も変化します。
lang
1str = str2 = "foo"
2str.replace("bar")
3p str # "bar"
4p str2 # "bar" 一緒に変わる
5
6# str → "bar" ← str2
そのため、あえて変数を共有しているという場合は、 replace
を使う必要があります。
ただし、基本的に破壊的メソッドの使用は避けるべきなので、 そういう状況にはしない方がいいです。
cf. Ruby 破壊的メソッドについて詳しく教えてください。| teratail
cf. 配列のコピーについて| teratail
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/11/18 16:26
2014/11/19 02:05
2014/11/20 11:24
2014/11/21 02:19
2014/11/21 12:08
2014/11/22 02:26
2014/11/23 00:31