我刚刚开始学习Ruby,而且我在全局和局部变量范围方面遇到困难。全局数组正在被函数改变
在练习题上,我发现全局定义的数组正在被一个函数调用。如果我明确地将数组赋值给别的东西,则没有任何变化。但是如果我一遍又一遍地删除项目,这会从全局数组本身中删除它们。
为什么delete
和pop
(我也测试过)方法有这种行为?我从阅读中了解到,这应该是而不是正在发生,函数内部的“数组”是对arr
的值的引用,而不是变量arr
。
(我使用Ruby版本2+)
def change_int x
x += 2
end
def change_arr array
array = [4, 5, 6]
end
def pop_arr array
puts array
new_array = []
while array.length > 0
new_array.push array[0]
array.delete_at 0
end
array
end
x = 5
change_int x
puts x == 5 # true
arr = [1, 2, 3]
change_arr arr
puts arr == [1, 2, 3] # true
old_arr = arr
puts pop_arr arr
puts arr == [1, 2, 3] # false
puts "arr = #{arr}" # arr = []
很清楚,谢谢!帮助我更好地处理上面的重要评论。 – kevlarr 2015-04-04 13:52:01