2013-09-29 33 views
1

我有以下代码。我后来在代码中遇到了游戏变量问题,经过进一步的检查,我的初始化代码看起来并没有运行。调试器不会触发。为什么我的初始化方法不在这里运行?实例化后,Ruby类永远不会进入我的初始化方法

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 
+0

除了什么@Max他回答说,更改,允许您运行后'Game.new',红宝石将提高一个'NoMethod'异常错误,当它进入'debugger'时(除非你的代码中没有显示'class Game'中的那个名字的方法)。 –

回答

1

与C++等静态语言不同,Ruby实际上是评估类定义中的代码。 Ruby正陷入until块中,所以它甚至从未完成类定义以实现实例化。您可能希望将该代码放入方法中,以便稍后调用它时才运行。

+0

谢谢!就是这样。 – user2827635

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