我想了解_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