3
私はarray.map(&:dup)
を使用するのが好ましいですanother answerで読む:違い `
ますしない限り、マーシャリングのトリックを使用しないでください。本当にオブジェクトグラフ全体を深くコピーしたいと思っています。通常、配列のみをコピーしたいのですが、含まれている要素はコピーしません。
これらの2つの方法の違いを示す例が好きです。
構文以外にも、同じことをしているように見えます。
Marshal
と#dup
の違いについての詳細は、興味があります。
arr = [ [['foo']], ['bar']]
foo = arr.clone
p arr #=> [[["foo"]], ["bar"]]
p foo #=> [[["foo"]], ["bar"]]
foo[0][0] = 42
p arr #=> [[42], ["bar"]]
p foo #=> [[42], ["bar"]]
arr = [ [['foo']], ['bar']]
foo = Marshal.load Marshal.dump arr
p arr #=> [[["foo"]], ["bar"]]
p foo #=> [[["foo"]], ["bar"]]
foo[0][0] = 42
p arr #=> [[["foo"]], ["bar"]]
p foo #=> [[42], ["bar"]]
arr = [ [['foo']], ['bar']]
foo = arr.map(&:dup)
p arr #=> [[["foo"]], ["bar"]]
p foo #=> [[["foo"]], ["bar"]]
foo[0][0] = 42
p arr #=> [[["foo"]], ["bar"]]
p foo #=> [[42], ["bar"]]
'array.map(&:dup)'は十分です。マップはコピーを作成するので、追加のdupは私の他の答えのタイプミスです – akuhn