che sto cercando di ottenere un nome di metodo da se stesso:Ruby - Come posso ottenere un nome di metodo all'interno di se stesso?
def funky_method
self.inspect
end
Esso restituisce "principale".
Come posso restituire "funky_method"?
che sto cercando di ottenere un nome di metodo da se stesso:Ruby - Come posso ottenere un nome di metodo all'interno di se stesso?
def funky_method
self.inspect
end
Esso restituisce "principale".
Come posso restituire "funky_method"?
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
Molto semplice:
def foo
puts __method__
end
__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
Sinonimo: '__method__' – steenslag
Solo' __method__' lavoreranno in 1.8, '__callee__' viene fornito con 1.9 – UncleGene
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. –