aa = 5
bb = [5]
def change(x,y)
x = x + 5
y[0] = y[0] + 5
puts "Done"
end
change(aa, bb)
p aa
#=> 5
p bb
#=> [10]
使用参数aa
和bb
调用更改方法后,bb
的值已更改,aa
的值未更改。
谁能解释为什么bb
的值已更改而aa
的值未更改。
第一行:
x = x + 5
为变量x
分配新值。新值仅在当前变量范围内有效,即在方法内有效。
第二行:
y[0] = y[0] + 5
也看起来像是一项作业,但不是。 y[0] = ...
是用于修改数组的方法调用Array#[]=
的语法糖。
因此,与第一行不同,第二行不更改变量– Array#[]=
之后仍然引用相同的对象。是已更改的对象,而不是变量。因此,从外部可以看到更改。
数组是可变对象,当您执行y
时,它实际上会修改现有数组
当您在方法内部进行赋值时,它会在本地范围内创建/更改变量,这意味着它不会更改/影响方法外声明的变量。]>
现在您的case数组没有被分配更改,它已由array_object << somevalue
运算符更改
要验证这一点,您可以使用以下代码
<<
您会发现它会更改值并在方法主体内打印新值,但在方法主体外仍会打印旧值(由于我在上面提到的第一点。)