我想了解_why的cloaker
方法,這是他在「A Block Costume」寫道:紅寶石:瞭解_why的cloaker方法
class HTML
def cloaker &blk
(class << self; self; end).class_eval do
# ... rest of method
end
end
end
我意識到class << self; self; end
開闢了self
的Eigenclass,但我從來沒有以前任何人在一個實例方法中都會這樣做。什麼是self
在我們這樣做的地步?我的印象是self
應該是接收器,該方法被調用於下,但cloaker
從內部method_missing
稱爲:
def method_missing tag, text = nil, &blk
# ...
if blk
cloaker(&blk).bind(self).call
end
# ...
end
那麼,什麼是self
的method_missing
調用之內?什麼是self
當我們致電:
((class << self; self; end).class_eval)
的cloaker
方法裏面?
基本上,我想知道我們是否我們打開HTML類的Eignenclass,或者如果我們將它做的HTML類的特定實例?
方式不知道如果我明白你的問題。 'method_missing'是一個實例方法,所以'self'指的是特定的實例和'class << self;自; end'返回該實例的Eigen類。 – Stefan 2013-05-08 13:45:49
注意,官方用語是'singleton_class' – 2013-05-08 16:26:22