Ruby undefined方法`[]' for nil:循环中的NilClass循环

时间:2015-04-21 01:36:59

标签: ruby loops

基本上我循环遍历数组矩阵来累加列,但它在9.times循环的第二次迭代之前停止。如果我更改y = 1,它将执行操作并停在y = 2,依此类推。

def new_feature(board)
  x=0
  y=0
  vertical = []
    while y < 9
      9.times do
        vertical << board[x][y]
        x += 1
      end
     puts vertical.reduce(:+)
     vertical = []
     y += 1 
    end
end

1 个答案:

答案 0 :(得分:3)

您永远不会将x重置为0,因此在第二次while次迭代中,x9开头,最后一次完成,而不是0 。这使得board[9],可能超出范围,因此nil;然后nil[1]崩溃你的代码。

请注意,您可以编写9.times do |x| ... endx0计算到8,而无需任何人工计数,因为times会将当前的迭代次数传入块。

此外,还有一种更加Ruby的方式来对列进行求和:

board.transpose.map { |row| row.reduce(&:+) }