Inicializando variables de instancia en Mixins
¿Hay alguna forma clara de inicializar las variables de instancia en un módulo que se pretende utilizar como Mixin? Por ejemplo, tengo lo siguiente:
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
Tenga en cuenta que tengo que comprobar una y otra vez si cada@member
se ha inicializado correctamente en cada función, esto es ligeramente irritante. Preferiría mucho escribir:
module Example
def initialize
@handlers = {}
@unhandled = []
@all_handlers = []
end
# or
@handlers = {}
@unhandled = []
# ...
end
Y no tiene que asegurarse repetidamente de que las cosas estén inicializadas correctamente. Sin embargo, de lo que puedo decir esto no es posible. ¿Hay alguna forma de evitar esto, además de agregar uninitialize_me
método paraExample
y llamandoinitialize_me
de la clase extendida? yo víeste ejemplo, pero no hay manera de que me parche las cosas enClass
Sólo para lograr esto.