Inicjowanie zmiennych instancji w Mixins
Czy jest jakiś czysty sposób na zainicjowanie zmiennych instancji w module przeznaczonym do użycia jako Mixin? Na przykład mam następujące:
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
Zauważ, że muszę sprawdzać raz po raz, jeśli każdy@member
został poprawnie zainicjowany w każdej funkcji - jest to lekko irytujące. Wolałbym raczej napisać:
module Example
def initialize
@handlers = {}
@unhandled = []
@all_handlers = []
end
# or
@handlers = {}
@unhandled = []
# ...
end
I nie trzeba wielokrotnie sprawdzać, czy wszystko jest poprawnie zainicjowane. Jednak z tego, co mogę powiedzieć, nie jest to możliwe. Czy jest jakiś sposób na to, oprócz dodaniainitialize_me
metoda doExample
i wołanieinitialize_me
z rozszerzonej klasy? widziałemten przykład, ale nie ma sposobu, by wplatać małpy w rzeczyClass
aby to osiągnąć.