Ruby array manipulation inside method

后端 未结 3 1861
傲寒
傲寒 2021-01-19 01:05

In the following, input_1 changes:

def method_1(a)
  a << \"new value\"
end

input_1 = []
method_1(input_1)
input_1 #=> [\"new value\"]         


        
3条回答
  •  天命终不由人
    2021-01-19 01:46

    With a bit of simplification we can say that a variable in Ruby is a reference to a value. In your case variable a holds a reference to an array.

    a << (a.append) mutates the value stored in variable a. The reference is not changed, but the value did. It's the case of method_1

    def method_1(a)
        a << "new value"
    end
    

    Assignment = changes the reference stored in a variable - it starts to point to a different value. References are copied when passed to a method. Because of that when you call

    def method_2(a)
        a = ["new value"]
    end
    input = []
    method_2(a)
    

    You only change a reference stored in a that is local to the method, without any change to the reference stored in input nor to the value (and array of []) that is pointed by this reference.

提交回复
热议问题