$0
переменная для программы Ruby верхнего уровня, но есть ли она для текущего метода?
ruby
reflection
metaprogramming
salt.racer
источник
источник
super
может быть вызвана внутри объекта SimpleDelegator:def description; __getobj__.respond_to?(__method__) ? super : 'No description'; end
Ответы:
Даже лучше, чем мой первый ответ, вы можете использовать __method__:
Это возвращает символ - например
:test_method
,. Чтобы вернуть имя метода в виде строки, вызовите__method__.to_s
вместо этого.Примечание: для этого требуется Ruby 1.8.7.
источник
__method__.to_s
и это будет имя метода, ничего большеС http://snippets.dzone.com/posts/show/2785 :
источник
__callee__
делает это?В зависимости от того, что вы на самом деле хотите, вы можете использовать либо,
__method__
либо__callee__
, которые возвращают имя исполняемого метода в качестве символа.На ruby 1.9 они оба ведут себя одинаково (что касается документации и моего тестирования).
На ruby 2.1 и 2.2
__callee__
ведет себя по-разному, если вы вызываете псевдоним определенного метода. В документах для двух различны:__method__
: «имя в определении текущего метода» (т.е. имя в том виде, как оно было определено)__callee__
: "вызываемое имя текущего метода" (т.е. имя, как оно было вызвано (вызвано))Тестовый скрипт:
1.9.3 Вывод:
2.1.2 Выход (
__callee__
возвращает псевдоним, но__method__
возвращает имя в точке, где был определен метод):источник
Для Ruby 1.9+ я бы порекомендовал использовать
__callee__
источник
__callee__
ведет себя по-разному до 1.9, поэтому лучше придерживаться,__method__
поскольку он имеет последовательное поведение.__callee__
ведет себя так же, как__method__
после 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
Разве ты не видишь ничего странного?__callee__
и__method__
имеет другое поведение. Смотрите pastie.org/10380985 (ruby 2.1.5)Я получил ту же проблему, чтобы получить имя метода в файле просмотра. Я получил решение от
если вы хотите получить имя контроллера, то
источник