Я использую Ruby 1.9.2, и у меня есть класс, который использует mixin наблюдателя:
require 'observer'
class Street
include Observable
attr_accessor :current
def initialize current
@current = current
end
def reset
@current = :preflop
end
def receive street
@current = street
changed
notify_observers
end
end
Но когда я пытаюсь добавить наблюдателя, например:
def initialize
@street = Street.new(:preflop)
@stats = Stats.new
@street.add_observer(@stats)
end
Я получаю эту ошибку:
can't convert nil into Integer (TypeError)
Что происходит в последней строке add_observer:
def add_observer(observer, func=:update)
@observer_peers = {} unless defined? @observer_peers
unless observer.respond_to? func
raise NoMethodError, "observer does not respond to `#{func.to_s}'"
end
@observer_peers[observer] = func
end
РЕДАКТИРОВАТЬ: это оказалось проблемой с моим attr_accessor для переменной с именем (erm) @hash Видимо, был какой-то конфликт с наблюдаемым миксином.