我很擅长从谷歌那里得到答案,但我就是不明白。在下面的代码中,为什么在调用 'addup' 后变量 'b' 会发生变化?我想我明白为什么 'a' 会改变(虽然它有点模糊),但我想将原始数组 'a' 保存到 'b',在 'a' 上运行该方法,所以我有两个不同内容的数组。我究竟做错了什么?
提前致谢
def addup(arr)
i=0
while i< arr.length
if arr[i]>3
arr.delete_at(i)
end
i += 1
end
return arr
end
a = [1,2,3,4]
b = a
puts "a=#{a}" # => [1,2,3,4]
puts "b=#{b}" # => [1,2,3,4]
puts "addup=#{addup(a)}" # => [1,2,3]
puts "a=#{a}" # => [1,2,3]
puts "b=#{b}" # => [1,2,3]
二者a
并b
保持在存储器中的相同的数组对象的引用。为了将原始数组保存在 中b
,您需要复制该数组。
a = [1,2,3,4] # => [1, 2, 3, 4]
b = a # => [1, 2, 3, 4]
c = a.dup # => [1, 2, 3, 4]
a.push 5 # => [1, 2, 3, 4, 5]
a # => [1, 2, 3, 4, 5]
b # => [1, 2, 3, 4, 5]
c # => [1, 2, 3, 4]
有关为什么会发生这种情况的更多信息,请阅读Ruby 是按引用传递还是按值传递?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句