我正在尝试理解_why在 "A Block Costume" 中写的
我意识到
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
method_missing
方法内的self
是什么?当我们调用时self
是什么?
((class << self; self; end).class_eval)
在 cloaker
方法内部?
基本上,我想知道我们是打开 HTML 类的 Eignenclass,还是针对 HTML 类的特定实例进行操作?
method_missing
是一个实例方法,因此self
指的是特定的实例,而class << self; self; end
返回该实例的特殊类。 - Stefan