Quando si invia un messaggio ad un oggetto, l'oggetto esegue il primo metodo che trova sul suo percorso di ricerca dei metodi con lo stesso nome del messaggio ricevuto. Se fallisce nel trovare tale metodo, esso genera un'eccezione
NoMethodError, a meno che non si sia fornito all'oggetto un metodo chiamato
method_missing. Quest’ultimo scavalca il simbolo del metodo non esistente e tutti gli argomenti che sono stati passati con esso.
Method_missing è in parte una rete di sicurezza giacché offre il modo di intercettare i messaggi a cui non si può rispondere e gestirli in modo appropriato, come nell’esempio che segue, dopo aver salvato il file come
tmp.rb:
<span style="font-size:1.0em">class Dummy
def method_missing(m, *args)
puts "Non esiste nessun metodo chiamato #{m} – ritenta ancora." end
end
Dummy.new.anything</span>
L'output è:
<span style="font-size:1.0em">>ruby tmp.rb
Non esiste nessun metodo chiamato anything – ritenta ancora.
>Exit code: 0</span>
"Traduzione e adattamento a cura di Francesca Beatrice Cice. La versione originale del tutorial di
Satish Talim può essere trovata su
rubylearning.com"