32
Qual è il punto di definizione di respond_to_missing?
anziché definire respond_to?
? Che cosa va storto se ridefinisci respond_to?
per qualche classe?`answer_to?` Vs. `answer_to_missing?`
Qual è il punto di definizione di respond_to_missing?
anziché definire respond_to?
? Che cosa va storto se ridefinisci respond_to?
per qualche classe?`answer_to?` Vs. `answer_to_missing?`
Senza respond_to_missing?
definito, cercando di ottenere il metodo tramite method
fallirà:
class Foo
def method_missing name, *args
p args
end
def respond_to? name, include_private = false
true
end
end
f = Foo.new
f.bar #=> []
f.respond_to? :bar #=> true
f.method :bar # NameError: undefined method `bar' for class `Foo'
class Foo
def respond_to? *args; super; end # “Reverting” previous redefinition
def respond_to_missing? *args
true
end
end
f.method :bar #=> #<Method: Foo#bar>
Marc-André (un nucleo committer rubino) presenta una buona blog post on respond_to_missing?
.
Oooh, questa è una buona risposta! Sto cancellando il mio. Grazie per avermi insegnato qualcosa di nuovo! – joelparkerhenderson
Grazie per l'informazione. – sawa
Per motivi di interesse, a cosa serve "answer_to?". C'è un caso d'uso legittimo per questo? –