В зависимости от того, что вы на самом деле хотите, вы можете использовать либо __method__
, либо __callee__
, которые возвращают имя исполняемого в данный момент метода в виде символа.
На ruby 1.9 они оба ведут себя одинаково (что касается документов и моего тестирования).
На ruby 2.1 и 2.2 __callee__
ведет себя по-разному, если вы вызываете псевдоним определенного метода. Документы для двух разных:
__method__
: «имя в определении текущего метода» (т. Е. Имя в том виде, как оно было определено)
__callee__
: "вызываемое имя текущего метода" (т.е. имя, как оно было вызвано (вызвано))
Тестовый скрипт:
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 Выход:
1.9.3
{:call_orig=>{:callee=>:orig, :method=>:orig},
:call_alias=>{:callee=>:orig, :method=>:orig}}
2.1.2 Вывод (__callee__
возвращает псевдоним, но __method__
возвращает имя в точке, где был определен метод):
2.1.2
{:call_orig=>{:callee=>:orig, :method=>:orig},
:call_alias=>{:callee=>:myalias, :method=>:orig}}