С небольшим упрощением можно сказать, что переменная в Ruby является ссылкой на значение. В вашем случае переменная a
содержит ссылку на массив.
a <<
(a.append
) изменяет значение , хранящееся в переменной a
. Ссылка не изменилась, но значение изменилось. Это случай method_1
def method_1(a)
a << "new value"
end
Назначение =
изменяет ссылку, хранящуюся в переменной - она начинает указывать на другое значение. Ссылки копируются при передаче методу. Из-за этого, когда вы звоните
def method_2(a)
a = ["new value"]
end
input = []
method_2(a)
Вы изменяете только ссылку, хранящуюся в a
, которая является локальной для метода, без каких-либо изменений в ссылку, сохраненную в input
, или в значение (и массив []
), на которое указывает эта ссылка.