2012-10-17 6 views

risposta

21

Ecco il codice:

Per le versioni> = 1.9:

def funky_method 

    return __callee__ 

end 

Per le versioni 1.9 <:

def funky_method 

    return __method__ 

end 
+3

Sinonimo: '__method__' – steenslag

+1

Solo' __method__' lavoreranno in 1.8, '__callee__' viene fornito con 1.9 – UncleGene

+1

Quindi, stai dicendo che' __method__' non funziona per Ruby Version> = 1.9? Secondo la risposta di Chetan Patil, producono valori diversi, il chiamante rispetto al nome del metodo in cui ti trovi. –

0

Molto semplice:

 

def foo 
    puts __method__ 
end 
 
7

__callee__ restituisce il "nome chiamato" del metodo corrente mentre __method__ restituisce il "nome alla definizione" del metodo corrente.

Di conseguenza, __method__ non restituisce il risultato previsto se utilizzato con alias_method.

class Foo 
    def foo 
    puts "__method__: #{__method__.to_s} __callee__:#{__callee__.to_s} " 
    end 

    alias_method :baz, :foo 
end 

Foo.new.foo # __method__: foo __callee__:foo 
Foo.new.baz # __method__: foo __callee__:baz