私は、既存の配列で新しい配列を作成することについていくつか混乱しています。ある配列を他の配列と等しく設定した場合、残りのコードに対して動的にリンクされるようです。これはコンパイラの属性ですか、それとも正しい関数を使って別の配列の値を格納していませんか?私はこれが非常に基本的な質問ではないことを願っています。Ruby:動的にリンクされた配列
main_arr = [1, 2, 3, 4, 5]
temp_arr = main_arr
puts "Main: " + main_arr.to_s
puts "Temp: " + temp_arr.to_s
main_arr.clear
puts "Main: " + main_arr.to_s
puts "Temp: " + temp_arr.to_s
出力:それは本当だ
Main: [1, 2, 3, 4, 5]
Temp: [1, 2, 3, 4, 5]
Main: []
Temp: []
'A'があなたの配列である場合は、' a.dup'は "浅い" コピーを作成します。 。たとえば、a = [[1,2]、[3,4]]とします。そして、 'b = a.dup#=> [[1,2]、[3,4]]'となります。ここまでは順調ですね。ここで要素を 'b'に追加することができます: 'b << 'dog' #=> [[1、2]、[3,4]、" dog "]'。 'a'は変更されません:' a#=> [[1,2]、[3,4]] '。 'b [1] [0]#=> 3'を考えてみましょう。さて、 'b'の要素を変更し、' a'にどうなるか見てみましょう: 'b [1] [0] = 'cat'; b#=> [[1、2]、["cat"、4]、 "dog"]; a#= [[1、2]、["cat"、4]] 'と入力します。あなたが期待していたものではありませんか?これは、 'dup'が' a'の「浅い」コピーを作成するためです。 –