¿Hay alguna manera limpia de inicializar variables de instancia en un Módulo destinado a ser utilizado como Mixin? Por ejemplo, tengo el siguiente:Inicializando variables de instancia en Mixins
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
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 escribir:
module Example
def initialize
@handlers = {}
@unhandled = []
@all_handlers = []
end
# or
@handlers = {}
@unhandled = []
# ...
end
Y no tiene que asegurarse repetidamente de que las cosas se hayan inicializado correctamente. Sin embargo, por lo que puedo decir, esto no es posible. ¿Hay alguna forma de evitar esto, además de agregar un método initialize_me
al Example
y llamar al initialize_me
desde la Clase extendida? Vi this example, pero no hay forma de que esté parcheando cosas en Class
solo para lograr esto.
Excelente, gracias - Me pregunto por qué no vi este enfoque mencionado en cualquier lugar a pesar de que hay un millón de artículos al respecto. –
Desafortunadamente, esto no parece funcionar: hacer referencia a '@ example_ivar' luego vuelve como' nil'. –
Ah, ya veo, gracias, pero esto causará problemas si la clase ya especifica un método 'initialize', ¿verdad? –