In ruby 1.9 è possibile utilizzare la variabile __method__ per ottenere il nome del metodo attualmente chiamato. In ruby 1.8 non esiste un modo diretto per accedere al nome del metodo ma è possibile accedere alla variabile caller che, tra le altre informazioni, contiene il nome del metodo chiamante (tips trovato su internet). Ecco come creare un metodo funzionante su entrambe le versioni:
def method_name
if RUBY_VERSION.to_f < 1.9
caller[0]=~/`(.*?)'/
$1
else
__method__
end
end
Se chiamerò da un metodo
foo() method_name otterò sempre 'foo'
Fico. C'è un modo per sapere il chiamante del chiamante? Cioè per sapere all'interno di un metodo, da quale metodo siamo stati chiamati?
RispondiEliminaUna cosa tipo caller(1) ‥ ?
Servirebbe ad esempio per salvare informazioni di debugging.