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

标签 javascript ruby function global-variables storing-data

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

相关文章:

ruby - 如何在 Octopress 中仅生成新帖子?

c++ - Functor -> 必须调用对非静态成员函数的引用

c - 将矩阵作为参数传递

javascript - 如何在不使用 getCompulatedStyle 的情况下确定字体粗细

javascript - 未捕获的语法错误 : Unexpected token ILLEGAL

ruby - Rails3 omniauth google 身份验证返回用户身份

oracle - PL/SQL 如何调用函数而不获取返回对象

javascript - 自定义上传+一键提交 angularjs

javascript - 将固定应用于内部 Div 会禁用溢出 :Hidden?

ruby - 如何使用 Celluloid 从线程池运行 HTTP 请求?