$0
es la variable del programa Ruby de nivel superior, pero ¿existe alguna para el método actual?Obtenga el nombre del método que se está ejecutando actualmente
Respuesta
Incluso mejor que mi primera respuesta puede utilizar __METHOD__:
class Foo
def test_method
__method__
end
end
Esto devuelve un símbolo - por ejemplo, :test_method
. Para devolver el nombre del método como una cadena, llame al __method__.to_s
en su lugar.
Nota: Esto requiere Ruby 1.8.7.
De http://snippets.dzone.com/posts/show/2785:
module Kernel
private
def this_method_name
caller[0] =~ /`([^']*)'/ and $1
end
end
class Foo
def test_method
this_method_name
end
end
puts Foo.new.test_method # => test_method
Esto me fue muy útil para encontrar el nombre del método * calling * (a diferencia del actual). – Lambart
¿'' __callee__' no hace esto? –
Gran solución Marque La mejor solución en este momento. Gran trabajo – jonathanccalixto
para Ruby 1.9+ me gustaría recomendar el uso __callee__
'__callee__' se comporta de forma diferente antes de 1.9, por lo que es mejor seguir con' __method__' ya que tiene un comportamiento constante. '__callee__' se comporta igual que' __method__' después de 1.9. –
@LeighMcCulloch ¿Puedes explicar la diferencia con un ejemplo (posiblemente en una nueva respuesta)? –
@CiroSantilli 视 iro def def def def def def 'def m1() puts (" aquí está el método # {__ method__}. Mi interlocutor es # {__ callee__}. ") End; def m2() puts ("aquí está el método # {__ method__}.Llamemos a m1 "); m1 end; m2' ¿No ve nada extraño? – jgburet
que tiene el mismo problema para recuperar el nombre del método en el archivo de vista. Tengo la solución por
params[:action] # it will return method's name
si desea obtener el nombre del controlador de entonces
params[:controller] # it will return you controller's name
Creo que malinterpretaste la pregunta acerca de las acciones del controlador de rieles & métodos http ... esta respuesta probablemente debería ser eliminada. –
Útil para obtener el nombre del método actualmente en ejecución (controlador) de la vista. – avjaarsveld
Dependiendo de lo que realmente desea, puede utilizar cualquiera __method__
o __callee__
, que devuelve el nombre del método que se está ejecutando como un símbolo.
En ruby 1.9, ambos se comportan de manera idéntica (en lo que respecta al docs y mis pruebas).
sobre el Ruby 2.1 2.2 & __callee__
comporta de manera diferente si se llama a un alias del método definido (ver el doc description ligeramente diferente)
escritura de la prueba:
require 'pp'
puts RUBY_VERSION
class Foo
def orig
{callee: __callee__, method: __method__}
end
alias_method :myalias, :orig
end
pp({call_orig: Foo.new.orig, call_alias: Foo.new.myalias})
1.9.3 Salida:
1.9.3
{:call_orig=>{:callee=>:orig, :method=>:orig},
:call_alias=>{:callee=>:orig, :method=>:orig}}
2.1.2 Salida (__callee__
devuelve el nombre con alias, pero __method__
ret urnas el nombre en el punto donde se definió el método):
2.1.2
{:call_orig=>{:callee=>:orig, :method=>:orig},
:call_alias=>{:callee=>:myalias, :method=>:orig}}
- 1. Obtener el nombre del método actual que se está ejecutando
- 2. Obtener el nombre del esquema del procedimiento almacenado que se está ejecutando actualmente
- 3. ¿Obtener instancia de la actividad que se está ejecutando actualmente?
- 4. Mostrar el nombre de la función que se está ejecutando actualmente
- 5. ¿Cómo obtener el nombre de la prueba que se está ejecutando actualmente en spock?
- 6. Buscar ruta al archivo que se está ejecutando actualmente
- 7. Determinando el caso de prueba que se está ejecutando actualmente por Nunit
- 8. ¿Obtiene el objeto TThread para el subproceso que se está ejecutando actualmente?
- 9. Cómo obtener la ruta de acceso del código javascript que se está ejecutando actualmente
- 10. ¿Cómo obtengo el directorio en el que se encuentra el archivo jar que se está ejecutando actualmente?
- 11. ¿Cómo obtengo el HMODULE para el código que se está ejecutando actualmente?
- 12. apropiante un hilo que se está ejecutando sincronizado método
- 13. Cómo determinar si una aplicación web se está ejecutando actualmente
- 14. ¿Cómo obtengo el identificador de ventana dando el nombre del proceso que se está ejecutando?
- 15. cómo ver qué código javascript se está ejecutando actualmente?
- 16. JavaScript: obtenga el nodo <script> actual que se está ejecutando?
- 17. Ruby: obtener el archivo que se está ejecutando
- 18. ¿Se está ejecutando un método al cerrar el programa?
- 19. iPhone SDK- Error del depurador: El programa que se está depurando no se está ejecutando
- 20. Obtener el nombre del método actual
- 21. ¿Cómo obtener la ubicación de la DLL que se está ejecutando actualmente?
- 22. Obtener nivel de la API de Android del teléfono se está ejecutando actualmente mi solicitud
- 23. Capture el sonido que se está reproduciendo actualmente
- 24. Global ASAX: obtenga el nombre del servidor
- 25. qué es cambiar el nombre no está disponible actualmente
- 26. PHP: obtenga el nombre del navegador
- 27. ¿Qué iniciador se está ejecutando?
- 28. No se puede quitar un usuario que está conectado actualmente
- 29. Finalmente el bloque no se está ejecutando?
- 30. Detectar qué aplicación se está ejecutando actualmente en iOS usando sysctl
Un uso es comprobar que se puede llamar a 'super' dentro de un objeto SimpleDelegator:' def description; __getobj __. respon_to? (__ method__)? super: 'Sin descripción'; end' – Kris