2011-11-30 42 views
0

我正在開發一個跳棋實現。我有這樣(只顯示相關部分)類:在Ruby中通過類訪問實例變量而無需實例化新對象

class Game 
    attr_accessor :current_player 

    def initialize 
    @gui = Gui.new 
    @current_player = :red 
    end 
end 

,我有:

class Gui 
    def move_request 
    "#{Game.current_player.to_s.upcase} make move(x1, y1, x2, y2): " 
    end 
end 

我收到此錯誤:

gui.rb:8:in `move_request': undefined method `current_player' for Game:Class (NoMethodError) 

我不想實例Gui類中的新對象Game,但我希望Gui類可以訪問current_player實例變量狀態。有關我應該做什麼的想法?

+0

似乎是一種誤解:實例變量是實例狀態(僅)的一部分,而不是類的一部分。只有在首先創建實例並設置了實例變量時纔會意識到。所以你的問題對我沒有意義... – mliebelt

+0

@mliebelt我明白你在說什麼,也許我可以用不同的方式說明:我有一個對象,gui,在我的Game類中聲明,我怎麼餵它.. 。只是意識到,我可以把它作爲參數的方法,對不起......現在感覺很愚蠢...... –

回答

2

實例變量在沒有實例的情況下甚至不存在,因此您無法按照問題的方式訪問實例變量。

你可能想要做像創建Gui時傳遞一個參考遊戲:

class Game 
    attr_accessor :current_player 

    def initialize 
    @gui = Gui.new(self) 
    @current_player = :red 
    end 
end 

class Gui 
    def initialize(game) 
    @game = game 
    end 

    def move_request 
    "#{@game.current_player.to_s.upcase} make move(x1, y1, x2, y2): " 
    end 
end 

有跡象表明,這可以實現各種其他的方式,這是最好的取決於你的更廣泛的使用情況。