The current method name that contains the execution point that is represented by the current stack trace element is provided by the java. lang. StackTraceElement. getMethodName() method.
More specifically, we can use StackFrame. getMethodName() to find the method name.
Even better than my first answer you can use __method__:
class Foo
def test_method
__method__
end
end
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_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 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 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
For Ruby 1.9+ I'd recommend using __callee__
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With