Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Ruby Diary #11: Intercettare chiamate a metodi non definiti in Ruby con method_missing

L'uso di Kernel#missing_method può aiutarci in alcune situazioni, vediamo perché questo metodo è così speciale.
L'uso di Kernel#missing_method può aiutarci in alcune situazioni, vediamo perché questo metodo è così speciale.
Link copiato negli appunti

Molto spesso si usa creare delle classi che possano adattarsi con facilità  a diversi ambienti e diverse situazioni sconosciute al momento in cui si scrive la classe stessa.

Per darvi un'idea di cosa sto parlando, osservate la documentazione di Zend_Rest_Client.

$technorati = new Zend_Rest_Client('http://api.technorati.com/bloginfo');
$technorati->key($key);
$technorati->url('http://pixelated-dreams.com');
$result = $technorati->get();
echo $result->firstname() .' '. $result->lastname();

La classe non ha assolutamente alcun metodo firstname() tanto meno un metodo lastname(). Tuttavia, ad una richiesta simile l'oggetto risponde correttamente grazie all'introduzione in PHP 5 dei metodi magici.

Anche Ruby offre alcune funzionalità  simili. Esiste uno speciale metodo, definito in Kernel, che si chiama Kernel#method_missing. àˆ speciale perché viene invocato ogni volta che si richiama un metodo inesistente in un oggetto.

La documentazione ufficiale offre un esempio significativo, ovvero l'uso di method_missing() in una classe per ottenere il numero corrispondente ad un numero romano.

class Roman
  def romanToInt(str)
    # ...
  end
  def method_missing(methId)
    str = methId.id2name
    romanToInt(str)
  end
end
r = Roman.new
r.iv      #=> 4
r.xxiii   #=> 23
r.mm      #=> 2000

<

Vi vengono in mente altri usi di questo metodo? Vi lascio con un indovinello per i programmatori Rails. Quale libreria di Rails fonda il suo funzionamento su questo metodo?

Ti consigliamo anche