我很擅长从谷歌上获得答案,但我就是不明白这一点。在下面的代码中,为什么在调用“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]
有关为什么会发生这种情况的更多信息,请阅读 Is Ruby pass by reference or by value?
关于调用方法时的 Ruby 变量行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51324772/