2017-03-19 10 views
0

私はRubyでObserver Patternをゼロから実装しようとしていますが、プログラミングでは理解できないエラーが私を止めました。オブジェクトをインスタンス配列にプッシュできないのはなぜですか?

私はインスタンスの配列にいくつかのオブジェクトを追加するためのメソッドを作成しましたが、私は、このメソッドを呼び出したとき、インタプリタは私に言うエラーを返します:

未定義のメソッドpush' for nil:NilClass Did you mean? puts (repl):15:in addObserver」 (REPL): 36: `'

私はこの配列を定義しました。なぜこのエラーが出るのか知っていますか?

(私が呼ぶとき、私はこのエラーが表示されます。matchOne.addObserver(playerOne))

ここでは、完全なコードです:

class Match 

attr_accessor :observers, :result 

@observers = Array.new 
@result = 0 

def notifyAll 
    @observers.each do |observer| 
    observer.update(self) 
    end 
end 

def addObserver(observer) 
    @observers.push(observer) 
end 

def increaseResult 
    @result += 1 
    notifyAll 
end 

end 

class Player 

def update(match) 
    puts "The result is #{match.result}" 
end 

end 

playerOne = Player.new 
matchOne = Match.new 

matchOne.addObserver(playerOne) 

私が助けを事前に感謝します。

答えて

4
@observers = Array.new 
@result = 0 

それはこれらの2つの変数がメソッド内でインスタンス化されていることが必要である

def initialize 
    @observers = Array.new 
    @result = 0 
end 
+0

べきか? –

+0

そのコードは実行されますが、他のメソッドのコードと同じスコープにはありません。したがって、 'addObserver'などの変数にアクセスする場合は、それをinitializeメソッドに入れるべきです。 – Ursus

+0

ありがとう、今私はそれを理解している:) –

関連する問題