Ruby method_missing

da Nss il marzo 12, 2010

Magari non tutti conoscono questo “bel” metodo di ruby, esso appartiene alla classe obj e fa parte del modulo Kernel di ruby.

il metodo è definito in questo modo:

obj.method_missing(symbol [, *args]) => result

e potrete trovare una sua descrizione della doc ufficiale di ruby [1].

In breve questo metodo intercetta le chiamate che un oggetto normalmente non sa gestire.
In symbol è contenuto il symbolo (:name) corrispondente al metodo chiamato, in args invece sono contenuti gli elementi passati ad esso.
Facciamo un esempio per capire meglio:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Test
   def not_exist(method)
     puts "Il metodo #{method} non esiste"
   end
   def method_missing(methid)
     method=methid.id2name #trasformo methid in stringa
     not_exist method
   end
end
 
if __FILE__==$0
       t=Test.new
       t.test
       t.sottolapancalacapracampa
end

provando ad eseguire questo condice si otterrà ad esempio il seguente risultato:

Il metodo test non esiste
Il metodo sottolapancalacapracampa non esiste

Semplice no??

[1] http://ruby-doc.org/core/classes/Kernel.html

Lascia un commento

Required.

Required. Not published.

If you have one.