为什么我不能将对象推送到实例数组中?

时间:2017-03-19 11:36:38

标签: ruby

我正在尝试从头开始在Ruby中实现Observer模式,但是我无法理解的错误在编程时阻止了我。

我已经创建了一个方法来将一些对象添加到实例数组中,但是当我调用此方法时,解释器会返回一个错误,指出:

  

未定义的方法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)

我事先感谢你的帮助。

1 个答案:

答案 0 :(得分:4)

@observers = Array.new
@result = 0

应该是

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