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)
私が助けを事前に感謝します。
べきか? –
そのコードは実行されますが、他のメソッドのコードと同じスコープにはありません。したがって、 'addObserver'などの変数にアクセスする場合は、それをinitializeメソッドに入れるべきです。 – Ursus
ありがとう、今私はそれを理解している:) –