当我打印出哈希值时,我有一个值数组用作订单的参考。我想修改数组,使数组值“更漂亮”。我想我只是复制或克隆数组,更改值并且原始对象将保持不变。但是(在 irb 中)...
@arr = ['stuff', 'things']
a = @arr.clone
b = @arr.dup
因此,至少 a 和 @arr 是不同的对象:
a.object_id == @arr.object_id
=> false
但现在变得奇怪了
a[0].capitalize!
a
=> ['Stuff', 'things']
@arr
=> ['Stuff', 'things'] ##<-what?
b
=> ['Stuff', 'things']## <-what???
好的...所以修改一个会改变其他的,让我们把它改回来?
a[0] = 'stuff'
a
=> ['stuff', 'things']
@arr
=> ['Stuff', 'things'] ## <- WHAT?????
为了完整性 b[1].capitalize! 具有相同的效果,将三个数组的第二个位置全部大写
那么......大写结尾的爆炸是否使它更加有效?足以穿越到其他物体??我知道这样做的其他方法,但这对我来说似乎非常奇怪。我认为这与“浅拷贝”有关。关于最好的方法的建议?