У меня есть некоторые проблемы с Руби по поводу обратных вызовов (и наследования). Вот мой код:
class Lmao
def initialize
@str = "HAHAHAHAHAHHAHAHAH"
@before_laughing = []
end
def self.inherited(base)
base.extend(Callbacks)
end
def laughing
@before_laughing.each {|method| send(method) }
@str
end
end
module Callbacks
def before_laughing(*methods)
@before_laughing = methods
end
end
class Lol < Lmao
before_laughing :downcase_please
def downcase_please
@str.downcase!
end
end
a = Lol.new
a.laughing # => "HAHAHAHAHAHHAHAHAH"
И как вы можете видеть, мой обратный вызов перед смехом не работает ... потому что массив @before_laughing пуст. Я считаю, что это можно исправить, отредактировав способ сохранения * методов в методе экземпляра Lol (изнутри Callbacks). Но я не понимаю, как ...
Если вы знаете решение, спасибо за ваш свет!