1

我有以下代码。我稍后在代码中获取游戏变量时遇到问题,经过进一步检查,我的初始化代码似乎没有运行。调试器永远不会触发。为什么我的初始化方法没有在这里运行?

class Game
  attr_accessor :player, :status

  def initialize
    @player=Player.new
    debugger
    @status="active"
  end

  until @status=="finished" 
    turn=Turn.new
    turn.start_turn
    ...MORE TURN CODE HERE...
  end
end

Game.new
4

2 回答 2

1

与 C++ 等静态语言不同,Ruby 实际上会评估类定义中的代码。Ruby 陷入了困境until,因此它甚至从未完成类定义以进行实例化。您可能希望将该代码放在一个方法中,以便它仅在您稍后调用它时运行。

于 2013-09-29T04:24:27.480 回答
0

你刚刚得到了一个无限循环until @status=="finished"里面@status的类定义是nil,所以@status=="finished"永远不会true

运行下面的代码,你会看到无限循环:

class Player; end

class Game
  attr_accessor :player, :status

  def initialize
    @player=Player.new
    @status="active"
  end

  until @status=="finished"
    p 1
  end
end
于 2013-09-29T04:29:49.327 回答