如何在不破坏分配给它的数组的情况下修改数组?

时间:2017-02-06 21:54:45

标签: ruby immutability

请考虑以下事项:

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]

3 个答案:

答案 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