Ruby 在重复函数时尝试存储数组元素

Ruby trying to store array elements when reiterating through functions

我正在尝试制作井字游戏。我很清楚该去哪里,我知道问题出在哪里,但我不确定如何解决。当我创建一个函数时,我为该函数建立了变量。 i = 0, row1 = [],但是当我重复函数时,每次再次调用该函数时,由于初始 row1 = [] 和我想使用的计数器,row1 又变空了,i = 0,每次都回到 0,因为我正在设置变量的函数的开头。我认为解决方案可能是使变量成为全局变量,并将其设置在函数之外,但我不确定该怎么做。但如果有人有任何建议,将不胜感激。这是问题代码。

def row1(player)
    row1 = []
    row1[player - 1] = "X"

    puts "#{row1}"

end

def choosespot_x

    puts "X -- Choose a spot"
    move = gets.chomp.to_i
    if move <= 3
        row1(move)
    end

choosespot_x

end

全局变量以 $ 为前缀,在 Ruby 中通常不是一个好主意。

实例变量,前缀为@,也可以为所欲为;在顶层,它们的行为与全局变量几乎相同,但在 classes 或模块中它们被很好地隔离了。

所以最好的方法是制作一个class;在 initialize 方法中创建您的变量(例如,@row1),然后您就可以在 choosespot_x 方法中使用它。

编辑:我会这样做的方式...

module TicTacToe
  class Board
    def initialize
      @board = Array.new(9)
    end

    def [](y, x)
      @board[x + y * 3 - 4]
    end

    def []=(y, x, value)
      @board[x + y * 3 - 4] = value
    end
  end
end

board = TicTacToe::Board.new
board[1, 3] = :white
board[3, 2] = :black
board[1, 3]
# => :white
board[1, 1]
# => nil