Я наткнулся на эту странную особенность (?) Массивов в Ruby, и было бы очень полезно, если бы кто-то мог объяснить мне, почему они работают так, как они.
Сначала давайте приведем пример того, как все обычно работает.
a = "Hello" #=> "Hello"
b = a #=> "Hello"
b += " Goodbye" #=> "Hello Goodbye"
b #=> "Hello Goodbye"
a #=> "Hello"
Хорошо, круто, когда вы используете =, он создает копию объекта (на этот раз строку).
Но когда вы используете массивы, это происходит:
a = [1,2,3] #=> [1,2,3]
b = a #=> [1,2,3]
b[1] = 5 #=> [1,5,3]
b #=> [1,5,3]
a #=> [1,5,3]
Теперь это просто странно. Это единственный обнаруженный мной объект, который не копируется при использовании =, а просто создает ссылку на исходный объект.
Может ли кто-то также объяснить (должен быть метод) для копирования массива, не указывая его на исходный объект?