运行时,它会正确地将3
中的array
更改为"blue"
,但会将所有其他元素更改为nil
。
array = [1, 2, 3, 4]
array.map! do |number|
if number == 3
array[number] = "blue"
end
end
由于我引入了if
语句,我希望它能将其他所有内容都留下来。有人可以解释为什么会发生这种情况以及如何让它只修改用if
语句隔离的元素吗?
答案 0 :(得分:1)
当你运行map!
时:
为self的每个元素调用给定的块一次,替换为 元素与块返回的值。
因此,当数字不匹配3时,该块正在返回nil
- 当它为3时,您实际上并不需要您正在使用的任务,只需{{1会产生同样的效果。
这应该完成你想要做的事情:
"blue"
请参阅http://ruby-doc.org/core-2.2.0/Array.html#method-i-map-21