jea*_*arl 7 ruby clone object duplicates
我有一个值数组,当我打印哈希值时,我将其用作订单的参考.我想修改数组,以便数组值"更漂亮".我想我只是复制或克隆数组,更改值,原始对象将保持未被控制.但是(在irb中)......
@arr = ['stuff', 'things']
a = @arr.clone
b = @arr.dup
Run Code Online (Sandbox Code Playgroud)
所以,至少,a和@arr是不同的对象:
a.object_id == @arr.object_id
=> false
Run Code Online (Sandbox Code Playgroud)
但现在它变得奇怪了
a[0].capitalize!
a
=> ['Stuff', 'things']
@arr
=> ['Stuff', 'things'] ##<-what?
b
=> ['Stuff', 'things']## <-what???
Run Code Online (Sandbox Code Playgroud)
好的...所以修改一个会改变其他的,让我们改回来?
a[0] = 'stuff'
a
=> ['stuff', 'things']
@arr
=> ['Stuff', 'things'] ## <- WHAT?????
Run Code Online (Sandbox Code Playgroud)
为了完整性b [1].资本化!具有相同的效果,将所有三个阵列的第二个位置都大写
那么......大写结束时的爆炸会使它变得更加强大吗?足够交叉到其他对象?我知道其他方法,但这对我来说似乎非常奇怪.我认为这与"浅版"有关.建议最好的方法吗?
dup
并clone
创建数组的新实例,但不是内容,它不是深层副本.
看到:
array0 = ['stuff', 'things']
array1 = array0.clone
array2 = array0.dup
puts "Array-Ids"
p array0.object_id
p array1.object_id
p array2.object_id
puts "Object ids"
array0.each_with_index{|_,i|
p array0[i].object_id
p array1[i].object_id
p array2[i].object_id
p '--------'
}
Run Code Online (Sandbox Code Playgroud)
数组中的元素共享相同的object_id - 它们是同一个对象.数组具有不同的对象ID.
当你a[0].capitalize!
修改一个对象,它是在三个不同的阵列的一部分.
也可以看看
归档时间: |
|
查看次数: |
1077 次 |
最近记录: |