Próbuję zrozumieć _why za cloaker
sposobu, który pisał o w „A Block Costume”:Ruby: metoda Cloaker Zrozumienie _why za
class HTML
def cloaker &blk
(class << self; self; end).class_eval do
# ... rest of method
end
end
end
Zdaję sobie sprawę, że class << self; self; end
otwiera Eigenclass z self
, ale nigdy widać, że ktoś robi to wcześniej w instancji metody. Co to jest self
w miejscu, w którym to robimy? Byłem pod wrażeniem self
powinny być odbiornik, że metoda została wezwana, ale cloaker
nazywany jest od wewnątrz method_missing
:
def method_missing tag, text = nil, &blk
# ...
if blk
cloaker(&blk).bind(self).call
end
# ...
end
Więc co jest self
wewnątrz zaproszenia method_missing
? A co jest self
gdy wzywamy:
((class << self; self; end).class_eval)
wewnątrz metody cloaker
?
Zasadniczo chcę wiedzieć, czy otwieramy Eignenclass klasy HTML, czy też robimy to dla określonej instancji klasy HTML?
Nie jestem pewien, czy rozumiem pytanie. 'method_missing' jest metodą instancji, więc' self' odnosi się do konkretnej instancji i 'class << self; samego siebie; end' zwraca Eigenclass tej instancji. – Stefan
Zauważ, że oficjalny termin to 'singleton_class' –