Инициализация переменных экземпляра в Mixins
Есть ли чистый способ инициализации переменных экземпляра в модуле, предназначенном для использования в качестве Mixin? Например, у меня есть следующее:
module Example
def on(...)
@handlers ||= {}
# do something with @handlers
end
def all(...)
@all_handlers ||= []
# do something with @all_handlers
end
def unhandled(...)
@unhandled ||= []
# do something with unhandled
end
def do_something(..)
@handlers ||= {}
@unhandled ||= []
@all_handlers ||= []
# potentially do something with any of the 3 above
end
end
Обратите внимание, что я должен проверять снова и снова, если каждый@member
правильно инициализирован в каждой функции - это слегка раздражает. Я бы предпочел написать:
module Example
def initialize
@handlers = {}
@unhandled = []
@all_handlers = []
end
# or
@handlers = {}
@unhandled = []
# ...
end
И не нужно многократно проверять правильность инициализации. Однако из того, что я могу сказать, это невозможно. Есть ли способ обойти это, кроме добавленияinitialize_me
метод дляExample
и звонитinitialize_me
из расширенного класса? Я виделэтот пример, но там'я ни за чтом обезьяна исправления вещи вClass
просто чтобы сделать это.