是否有任何干净的方法来初始化要用作 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
为了完成这个而将猴子修补到里面。