以下相关代码。我有实例变量,@ 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没有进行换出,我只需使用调用方法传递一个变量。任何见解将不胜感激。
答案 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
希望很快我就可以清楚地了解何时使用类实例变量以及何时使用实例实例变量。