У меня возникла путаница в заполнении нового массива существующим массивом. Похоже, если я установил один массив равным другому, они станут динамически связаны для остальной части кода. Является ли это атрибутом компилятора или я не использую правильные функции для хранения значений одного массива в другом? Надеюсь, это не очень простой вопрос.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], «собака»] '. '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'. –