为什么是我的地图!循环行为怪异?

时间:2017-05-12 21:54:00

标签: ruby

我有这段代码:

#test document for my pseudo code

userInput = "go"

arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

while userInput != "exit"

  arr.each do |first|

    first.map! do |second|

      if userInput.to_i == second
        first[second] = "X"
      end

      print "|#{second}|"

    end

    print "\n"

  end

  puts "Type quit for exiting game, or a number"
  userInput = gets.chomp
end

如果我运行此命令并输入数字,则会发生这种情况:

Screenshot

如果我改变了地图!将它映射起作用,但在下一次迭代中保存的" X"在数组中,因为map只返回一个新数组。我想用map更改现有值的值!但为什么它表现得那么奇怪?

2 个答案:

答案 0 :(得分:0)

我解决了。

问题是map循环中的print语句。这返回nil并且它是最后一次返回,因此数组中的所有内容都设置为nil。

我通过将/MyCustomUsers/reset-password放在print语句下面来解决它:

second

答案 1 :(得分:0)

map!通过用块中的返回值替换每个元素来转换数组。块的返回值(通常)是块内计算的最后一个表达式的返回值。在您的情况下,块内评估的最后一个表达式是

print "|#{second}|"

返回nil。换句话说:数组中的每个元素都会被nil替换,因为这是您告诉map!要执行的操作。