Ruby n.times发行
正在使用的Ruby 2.3,irbRuby n.times发行,ruby,Ruby,正在使用的Ruby 2.3,irb a, b = [], [1,2,3] 3.times do b[0] += 1 a << b end 但我明白了 => [[4, 2, 3], [4, 2, 3], [4, 2, 3]] 为什么?谢谢 附言 如果我这样做 a = [] 3.times do |n| a << n end a=[] 3.2倍| a之所以得到相同的结果,是因为b是您在a中添加了3次的同一个对象b保持不变。这就是a存储相同值的原因 p
a, b = [], [1,2,3]
3.times do
b[0] += 1
a << b
end
但我明白了
=> [[4, 2, 3], [4, 2, 3], [4, 2, 3]]
为什么?谢谢
附言
如果我这样做
a = []
3.times do |n|
a << n
end
a=[]
3.2倍|
a之所以得到相同的结果,是因为b
是您在a
中添加了3次的同一个对象<代码>b
保持不变。这就是a
存储相同值的原因
p a.map(&:object_id) # => three same object id referencing to b.
即使您执行a[0][1]=100
,您也会看到相同的值反映在所有位置=>[[4100,3],[4100,3],[4100,3]
您应该使用保存中间b
值
a, b = [], [1,2,3]
3.times do
b[0] += 1
a << b.dup
end
=> [[2, 2, 3], [3, 2, 3], [4, 2, 3]]
a,b=[],[1,2,3]
3.5倍
b[0]+=1
a[[2,2,3],[3,2,3],[4,2,3]]
对于问题的后半部分,您可能需要阅读-您得到了相同的答案,因为
b
是您在a
中添加了3次的同一个对象<代码>b保持不变。这就是a
存储相同值的原因
p a.map(&:object_id) # => three same object id referencing to b.
即使您执行a[0][1]=100
,您也会看到相同的值反映在所有位置=>[[4100,3],[4100,3],[4100,3]
您应该使用保存中间b
值
a, b = [], [1,2,3]
3.times do
b[0] += 1
a << b.dup
end
=> [[2, 2, 3], [3, 2, 3], [4, 2, 3]]
a,b=[],[1,2,3]
3.5倍
b[0]+=1
a[[2,2,3],[3,2,3],[4,2,3]]
对于问题的后半部分,您可能需要阅读-添加了解释问题后半部分的链接<代码>n是该块中每次的不同引用。:)添加了解释问题后面部分的链接<代码>n是该块中每次的不同引用。:)