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
はこれを行う時点で何ですか?
def method_missing tag, text = nil, &blk
# ...
if blk
cloaker(&blk).bind(self).call
end
# ...
end
だから何がmethod_missing
コール内部self
です:メソッドがコールされたが、cloaker
がmethod_missing
内部から呼び出されたことを受信する必要があります私は印象self
下にありましたか? cloaker
メソッド内
((class << self; self; end).class_eval)
:そして、我々が呼ぶときself
何ですか?
基本的には、私たちがHTMLクラスのEignenクラスを開いているのか、それともHTMLクラスの特定のインスタンスに対して行っているのかを知りたいですか?
のちょうど前の1.9の方法私はあなたの質問を理解していればわかりません。 'method_missing'はインスタンスメソッドなので、' self'は特定のインスタンスを参照し、 'class << self;自己; end'はそのインスタンスのEigenclassを返します。 – Stefan
公式の用語は 'singleton_class'です –