Ruby在遍历函数时尝试存储数组元素

Ruby trying to store array elements when reiterating through functions

本文关键字:存储 数组元素 遍历 函数 Ruby      更新时间:2023-09-26

我正在尝试制作一款井字游戏。我知道该去哪里,也知道问题是什么,但我不知道如何解决它。当我创建一个函数时,我为这个函数建立变量。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中通常是一个坏主意。

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

所以最好的方法是创建一个类;在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