是否有任何干淨的方法來初始化模塊中的實例變量,以用作Mixin?例如,我有以下幾點:初始化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
請注意,我不得不一次又一次地檢查如果每個@member
,已在每個功能是否正確初始化 - 這輕微刺激。我寧願寫:
module Example
def initialize
@handlers = {}
@unhandled = []
@all_handlers = []
end
# or
@handlers = {}
@unhandled = []
# ...
end
而不是必須重複確保東西正確初始化。但是,從我可以告訴這是不可能的。除了在Example
中添加initialize_me
方法並從擴展類中調用initialize_me
之外,有什麼方法可以解決這個問題嗎?我確實看到了this example,但是我沒有辦法只爲了達到這個目的而將它們修改成Class
。
非常好,謝謝 - 我想知道爲什麼我沒有看到這個方法提到任何地方,即使有一百萬篇關於它的文章。 –
不幸的是,這看起來不起作用 - 引用'@ example_ivar'然後返回爲'nil'。 –
啊,我明白了,謝謝 - 但是如果這個類已經指定了一個'initialize'方法就會引發問題,對吧? –