обходной путь для ruby ​​1.9.2: метод super from singleton, определенный для нескольких классов, не поддерживается - PullRequest
1 голос
/ 24 ноября 2010

Ruby 1.9.2 запрещает вызов "super" из одноэлементных методов, определенных для нескольких классов.

Часто лучшее решение - просто прекратить использование одноэлементных методов. Однако мы переопределяем self.inherited, который является частью определения языка, поэтому это невозможно.

Кто-нибудь нашел хороший обходной путь? Я пробовал:

def self.inherited(klass)
  # ...
  klass.ancestors.each do |kls|
   if kls.respond_to?(:inherited) && !kls.include?(MyModuleName)
     kls.inherited(klass)
    end
  end
end

Что не работает.

Я также пытался alias_method_chain'ing функции, но это тоже не сработало.

Дополнительный контекст доступен по адресу https://hobo.lighthouseapp.com/projects/8324-hobo/tickets/840 && http://github.com/tablatom/hobo,, хотя вы также можете просто запросить дополнительный контекст, если я недостаточно предоставил.

1 Ответ

2 голосов
/ 27 ноября 2010

Домицио Демикелис нашел ответ, и он странный:

eval %(
  def self.inherited(klass)
    # ...
    klass.ancestors.each do |kls|
     if kls.respond_to?(:inherited) && !kls.include?(MyModuleName)
       kls.inherited(klass)
      end
    end
  end
)

Правильно - оберните функцию в eval.Eval находится за пределами функции, поэтому никаких дополнительных затрат времени выполнения не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...