Get the name of the currently executing method Get the name of the currently executing method ruby ruby

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