$0
- это переменная для программы Ruby верхнего уровня, но есть ли она для текущего метода?Получить имя текущего исполняемого метода
ответ
Даже лучше, чем мой первый ответ вы можете использовать __METHOD__:
class Foo
def test_method
__method__
end
end
Это возвращает символ - например, :test_method
. Чтобы вернуть имя метода в виде строки, вместо этого вызовите __method__.to_s
.
Примечание: Для этого требуется Ruby 1.8.7.
':' является символом символа. :) просто сделайте `__method __. To_s`, и это будет имя метода, ничего больше – Lambart 2013-09-25 23:39:55
От 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
Это очень помогло мне найти имя * call * (в отличие от текущего) метода. – Lambart 2013-09-27 00:50:43
Не делает ли это `__callee__`? – 2015-05-22 16:32:48
Отличное решение Mark Лучшее решение сейчас. Отличная работа – jonathanccalixto 2016-09-19 08:13:32
Для Руби 1.9+ я бы рекомендовал использовать __callee__
я получил тот же вопрос, чтобы восстановить имя метода в файл представления. Я получил решение по
params[:action] # it will return method's name
, если вы хотите, чтобы получить имя контроллера затем
params[:controller] # it will return you controller's name
В зависимости от того, что вы на самом деле хотите, вы можете использовать либо __method__
или __callee__
, которые возвращают имя исполняемого в данный момент метода как символ.
На рубине 1.9 оба они ведут себя одинаково (насколько это касается docs и моих испытаний).
На рубин 2,1 & 2,2 __callee__
ведет себя по-другому, если вы звоните псевдоним определенного метода (см немного другой doc description)
тестовый скрипт:
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__
ret urns имя в точке, где был определен метод):
2.1.2
{:call_orig=>{:callee=>:orig, :method=>:orig},
:call_alias=>{:callee=>:myalias, :method=>:orig}}
- 1. Получить имя текущего исполняемого метода в ядре dotnet
- 2. Получить имя текущего метода
- 3. Как распечатать имя текущего исполняемого метода с помощью вспомогательного метода?
- 4. Mbunit - Gallio. Получить имя текущего исполняемого теста
- 5. Получить имя исполняемого банку из метода main()
- 6. Получить имя исполняемого @Test метода в @Before в JUNIT
- 7. Как получить имя текущего метода в squeak?
- 8. Как получить имя текущего метода из кода
- 9. Получить имя текущего метода от функции async?
- 10. Получить имя текущего класса + метода в AS3
- 11. Может ли имя текущего метода текущего протокола?
- 12. Получить имя родительской папки текущего исполняемого пакетного скрипта
- 13. Как получить имя текущего исполняемого файла на C#?
- 14. Получить имя текущего процесса (исполняемого файла) в Go?
- 15. Получить текущее имя метода
- 16. Как получить HMODULE для текущего исполняемого кода?
- 17. Получить имя исполняемого командного файла
- 18. Получить имя исполняемого пакета dmg
- 19. Как получить имя исполняемого типа?
- 20. Извлечение текущего исполняемого имени
- 21. Получить имя текущего поля
- 22. получить имя текущего класса
- 23. Получить имя текущего пользователя
- 24. Qt5 Изменение Softlink текущего исполняемого исполняемого файла
- 25. Получить имя метода делегата
- 26. Как получить имя текущего метода в Delphi 7?
- 27. Как получить имя или подпись текущего метода в NSString?
- 28. Как я могу получить имя текущего метода Meteor?
- 29. py.test: как получить имя текущего теста из метода настройки?
- 30. Получить имя текущего метода вызова во время выполнения
Одно использование проверки `super` может быть вызвано в объекте SimpleDelegator:` def description; __getobj __. reply_to? (__ method__)? super: «Без описания»; end` – Kris 2013-09-26 13:57:39