我正在尝试制作井字游戏。我很清楚该去哪里,我知道问题是什么,但我不知道如何解决它。当我创建一个函数时,我为该函数建立变量。 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 中通常是个坏主意。
实例变量,前缀为@
,也可以做你想做的事;在顶层,它们的行为与全局变量几乎相同,但在类或模块中它们很好地隔离。
所以最好的办法就是开一个类;在 @row1
中创建变量(例如 initialize
)方法,然后你就可以在 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
关于javascript - Ruby 在重复函数时尝试存储数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40122250/