Get the name of the currently executing method
Even better than my first answer you can use __method__:
class Foo def test_method __method__ endend
This returns a symbol – for example, :test_method
. To return the method name as a string, call __method__.to_s
instead.
Note: This requires Ruby 1.8.7.
Depending on what you actually want, you can use either __method__
or __callee__
, which return the currently executing method's name as a symbol.
On ruby 1.9, both of them behave identically (as far as the docs and my testing are concerned).
On ruby 2.1 & 2.2 __callee__
behaves differently if you call an alias of the defined method. The docs for the two are different:
__method__
: "the name at the definition of the current method" (i.e. the name as it was defined)__callee__
: "the called name of the current method" (i.e. the name as it was called (invoked))
Test script:
require 'pp'puts RUBY_VERSIONclass Foo def orig {callee: __callee__, method: __method__} end alias_method :myalias, :origendpp( {call_orig: Foo.new.orig, call_alias: Foo.new.myalias} )
1.9.3 Output:
1.9.3{:call_orig=>{:callee=>:orig, :method=>:orig}, :call_alias=>{:callee=>:orig, :method=>:orig}}
2.1.2 Output (__callee__
returns the aliased name, but __method__
returns the name at the point the method was defined):
2.1.2{:call_orig=>{:callee=>:orig, :method=>:orig}, :call_alias=>{:callee=>:myalias, :method=>:orig}}
From http://snippets.dzone.com/posts/show/2785:
module Kernelprivate def this_method_name caller[0] =~ /`([^']*)'/ and $1 endendclass Foo def test_method this_method_name endendputs Foo.new.test_method # => test_method