gpt4 book ai didi

调用方法时的 Ruby 变量行为

转载 作者:太空宇宙 更新时间:2023-11-03 17:06:25 25 4
gpt4 key购买 nike

我很擅长从谷歌上获得答案,但我就是不明白这一点。在下面的代码中,为什么在调用“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]

最佳答案

ab 都持有对内存中同一个数组对象的引用。为了将原始数组保存在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com