Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby n.times发行_Ruby - Fatal编程技术网

Ruby n.times发行

Ruby 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

正在使用的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.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是该块中每次的不同引用。:)