sto cercando di capire cloaker
il metodo di _why che ha scritto su in "A Block Costume":Rubino: il metodo cloaker di _why intesa
class HTML
def cloaker &blk
(class << self; self; end).class_eval do
# ... rest of method
end
end
end
mi rendo conto che class << self; self; end
apre l'Eigenclass di self
, ma non ho mai visto nessuno fare questo all'interno di un metodo di istanza prima. Qual è self
nel punto in cui lo facciamo? Ho avuto l'impressione self
dovrebbe essere il ricevitore che il metodo è stato chiamato, ma cloaker
si chiama dall'interno method_missing
:
def method_missing tag, text = nil, &blk
# ...
if blk
cloaker(&blk).bind(self).call
end
# ...
end
Allora, qual è self
dentro la chiamata method_missing
? E ciò che è self
quando chiamiamo:
((class << self; self; end).class_eval)
all'interno del metodo cloaker
?
sostanza, voglio sapere se ci stiamo aprendo l'Eignenclass della classe HTML, o se lo stiamo facendo a una specifica istanza della classe HTML?
Non sono sicuro se ho capito la tua domanda. 'Method_missing' è un metodo di istanza, quindi' self' riferisce al caso specifico e 'classe << sé; se stesso; FINE' restituisce l'Eigenclass di tale istanza. – Stefan
Nota che il termine ufficiale è 'singleton_class' –