arr = ["red","green","blue","yellow"]
arr.each do |colour|
if colour == "red"
colour = "green"
end
end
puts arr.inspect
Run Code Online (Sandbox Code Playgroud)
以上代码输出:
["red", "green", "blue", "yellow"]
Run Code Online (Sandbox Code Playgroud)
但为什么不呢?
["green", "green", "blue", "yellow"]
Run Code Online (Sandbox Code Playgroud)
我认为颜色是对数组中当前元素的引用,无论我做了什么都会影响该数组元素?
当您在arr.each
块内时,colour
变量将绑定到arr
数组中的一个对象.
但是,只要colour = "green"
在块中进行赋值,现在colour
变量就绑定到一个新对象(即一个值为的String "green"
),原始文件arr
保持不受影响.
实现您所谈论的内容的一种方法是:
arr.each_index do |i|
arr[i] = "green" if arr[i] == "red"
end
Run Code Online (Sandbox Code Playgroud)
它直接操纵数组.