hoge.dup
で大丈夫!と思っていたらそうではなかったのでメモ
dupだと何が起きるか
要素そのものを操作されると影響を受けてしまう
例
# 元の配列をつくり、複製を .dup で作る array = ["first"] #=> ["first"] dup_array = array.dup #=> ["first"] # 複製配列に要素を足す、元配列に影響がないことを確認する dup_array.push("two") #=> ["first", "two"] array #=> ["first"] dup_array #=> ["first", "two"] # 複製配列の要素を直接書き換える、今回はgsub!で置き換え dup_array.first.gsub!('first',"one") => "one" # 元の配列にも影響がでている dup_array #=> ["one", "two"] array #=> ["one"]
ActiveSupportのdeep_dupを使う
配列などを複製する場合はdeep_dupを使うとそれらの憂いは無くなる。
array = ["first"] #=> ["first"] dup_array = array.deep_dup #=> ["first"] dup_array.push("two") #=> ["first", "two"] dup_array.first.gsub!('first',"one") #=> "one" array #=> ["first"] dup_array #=> ["one", "two"]