$0 es la variable para el programa Ruby de nivel superior, pero ¿hay alguna para el método actual?
                    
                        ruby
                                reflection
                                metaprogramming
                                
                    
                    
                        corredor de sal
fuente
                
                fuente

superse puede llamar dentro de un objeto SimpleDelegator:def description; __getobj__.respond_to?(__method__) ? super : 'No description'; endRespuestas:
Incluso mejor que mi primera respuesta, puede usar __method__:
Esto devuelve un símbolo, por ejemplo
:test_method,. Para devolver el nombre del método como una cadena, llame en su__method__.to_slugar.Nota: Esto requiere Ruby 1.8.7.
fuente
__method__.to_sy será el nombre del método, nada másDe http://snippets.dzone.com/posts/show/2785 :
fuente
__callee__No hace esto?Dependiendo de lo que realmente desee, puede usar cualquiera
__method__o__callee__, que devuelve el nombre del método que se está ejecutando actualmente como un símbolo.En ruby 1.9, ambos se comportan de manera idéntica (en lo que respecta a los documentos y mis pruebas).
En ruby 2.1 y 2.2 se
__callee__comporta de manera diferente si llama a un alias del método definido. Los documentos para los dos son diferentes:__method__: "el nombre en la definición del método actual" (es decir, el nombre como se definió)__callee__: "el nombre llamado del método actual" (es decir, el nombre como se llamó (invocado))Script de prueba:
1.9.3 Salida:
2.1.2 Salida (
__callee__devuelve el nombre con alias, pero__method__devuelve el nombre en el punto en que se definió el método):fuente
Para Ruby 1.9+, recomendaría usar
__callee__fuente
__callee__se comporta de manera diferente antes de 1.9, por lo que es mejor seguir__method__ya que tiene un comportamiento constante.__callee__se comporta igual que__method__después de 1.9.def m1() puts("here is #{__method__} method. My caller is #{__callee__}.") end; def m2() puts("here is #{__method__} method. Let's call m1"); m1 end; m2¿No ves nada extraño?__callee__y__method__tiene un comportamiento diferente. Ver pastie.org/10380985 (ruby 2.1.5)Tengo el mismo problema para recuperar el nombre del método en el archivo de vista. Obtuve la solución por
si quieres obtener el nombre del controlador, entonces
fuente