Ruby-Loop不会中断

Ruby-Loop不会中断,ruby,loops,break,Ruby,Loops,Break,我用Ruby为Odin项目(Tic-Tac-Toe)编写了这段代码,当@won为true时,它不会中断。我可以确认@won正在成为现实,但它不会崩溃。完整代码在 修复了我将代码更改为使用一个单板实例,现在似乎可以正常工作。你的代码很奇怪。您正在创建两个棋盘对象-您在第一个实例上调用。play,然后在play方法中创建另一个棋盘对象,所有游戏逻辑都在第二个实例上执行。因此,如果b赢了,你应该做中断 但是最好重构你的代码,这样。play不会创建新的实例。你的代码很奇怪。您正在创建两个棋盘对象-您在第

我用Ruby为Odin项目(Tic-Tac-Toe)编写了这段代码,当@won为true时,它不会中断。我可以确认@won正在成为现实,但它不会崩溃。完整代码在


修复了我将代码更改为使用一个单板实例,现在似乎可以正常工作。

你的代码很奇怪。您正在创建两个棋盘对象-您在第一个实例上调用
。play
,然后在
play
方法中创建另一个棋盘对象,所有游戏逻辑都在第二个实例上执行。因此,如果b赢了,你应该做
中断


但是最好重构你的代码,这样。play不会创建新的实例。

你的代码很奇怪。您正在创建两个棋盘对象-您在第一个实例上调用
。play
,然后在
play
方法中创建另一个棋盘对象,所有游戏逻辑都在第二个实例上执行。因此,如果b赢了,你应该做
中断


但是最好重构您的代码。play不会创建新实例。

您是否检查了
@won
的值以查看其设置是否正确?休息前,把@won.inspect?
或类似的东西放进去,看看它是什么样子。如果循环未中断,则表示
@won
要么未设置,要么始终设置为
false
@lower:实际上我设置了'@won',但在代码的另一部分。我现在要把它添加到顶部。如果b.won
不是答案,也许应该是
中断,但是为什么不说
直到@won do
而不是
循环do
break
这里只是对循环中有条件的一个半途而废的替换。大概,
检查\u for_win()
@won
设置为
true
false
。既然您没有向我们展示该方法,您希望我们如何提供帮助?您是否检查了
@won
的值以查看其设置是否正确?休息前,把@won.inspect?
或类似的东西放进去,看看它是什么样子。如果循环未中断,则表示
@won
要么未设置,要么始终设置为
false
@lower:实际上我设置了'@won',但在代码的另一部分。我现在要把它添加到顶部。如果b.won
不是答案,也许应该是
中断,但是为什么不说
直到@won do
而不是
循环do
break
这里只是对循环中有条件的一个半途而废的替换。大概,
检查\u for_win()
@won
设置为
true
false
。既然你没有向我们展示这个方法,你希望我们如何帮助你?我正试图这么做,但我以前一直使用.play作为类方法,但它不起作用。思考如何修复that@meecoder:类方法不会看到实例变量——或者更确切地说,它看到的实例变量将是
Board
class
)的实例,而不是
Board
。@谢谢!我发现了这一点,并重新编写了代码,现在它开始工作了。我正在尝试这样做,但我曾经使用.play作为类方法,但它不起作用。思考如何修复that@meecoder:类方法不会看到实例变量——或者更确切地说,它看到的实例变量将是
Board
class
)的实例,而不是
Board
。@谢谢!我解决了这个问题,重新编写了代码,现在可以正常工作了。
b = Board.init
b.create_squares
b.display_board
loop do
  if @turn == "player"
    print "Your turn! "
    b.player_turn
    b.display_board
    b.check_for_win
    @turn = "computer"
  else
    sleep 1.2
    b.computer_turn
    b.display_board
    b.check_for_win
    @turn = "player"
  end
  break if @won
end