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
我正在尝试制作井字游戏。我很清楚该去哪里,我知道问题出在哪里,但我不确定如何解决。当我创建一个函数时,我为该函数建立了变量。 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