试图传递实例值,但它无法正常工作

时间:2017-08-10 23:36:06

标签: ruby

以下相关代码。我有实例变量,@ replace和attr_accessor替换。在方法get_player中,@ place有正确的值,我希望得到,就put和p可以告诉我。我认为'它应该设置实例变量。对于班级,但事实并非如此。当我尝试在refresh_board中使用它时它是空的。

class Board < TicTacToe

  attr_accessor :current_player, :replace, :board, :player

  def initialize(board = "
                       ╔════╦════╦════╗
                       ║ 1  ║ 2  ║ 3  ║  
                       ╠════╬════╬════╣
                       ║ 4  ║ 5  ║ 6  ║
                       ╠════╬════╬════╣
                       ║ 7  ║ 8  ║ 9  ║
                       ╚════╩════╩════╝")
       @board = board
       @player = player
       @replace = replace
  end

  def refresh_board(x)
    @board.gsub!(/#{x}/, "#{@replace}")
    display_board
  end

  def get_player(a)
    @current_player = a
    if @current_player == 'Player 1'
      @replace = 'X'
    else 
      @replace = 'O'
    end
  end
end

我没有实例化另一个实例,所以也许这就是原因。在这一点上,经过大量的搜索,我还没有找到解决方案。如果gsub没有进行换出,我只需使用调用方法传递一个变量。任何见解将不胜感激。

1 个答案:

答案 0 :(得分:0)

我认为我的问题是实例变量而不是初始化。然而,即使初始化@replace变量似乎也没有帮助。我发现this article有助于阐明我对实例变量的理解,特别是类实例变量。我认为它们更适合我的代码中的特定部分,但我无法解释它们为什么非常好。

现在在课堂上我宣布一个班级实例变量

class Board < TicTacToe
  class << self; attr_accessor :replace end
  @replace = nil
  # rest of code
end

然后将变量赋值给Object#instance_variable并调用它:

def refresh_board(x)
    @board.gsub!(/#{x}/, "#{Board.replace}")
    display_board
    end

希望很快我就可以清楚地了解何时使用类实例变量以及何时使用实例实例变量。