请考虑以下事项:
array1 = [1, 2, 3, 4]
array2 = array1 # => [1, 2, 3, 4]
array2.pop
array2 # => [1, 2, 3]
array1 # => [1, 2, 3]
为什么array1
仅在pop
上调用array2
时被销毁?有没有办法pop
来自array2
的最后一个值,并保持array1
完好无损,以便我得到array1 # => [1, 2, 3, 4]
?
答案 0 :(得分:4)
这是一个别名问题。您的引用指向内存中的相同Array对象。如果你的数组包含像dup
方法那样的简单整数,那就行了。
array2 = array1.dup
答案 1 :(得分:1)
array2 = array1.dup
array2 = array1.clone
=>您的更改会影响两个数组
答案 2 :(得分:0)
我更喜欢 Object#dup 方法,但这里还有一个选项FYI:
> array1 = [1, 2, 3, 4]
#=> [1, 2, 3, 4]
> array2 = Array.new + array1
#=> [1, 2, 3, 4]
> array1.object_id
#=> 87422520
> array2.object_id
#=> 87400390