$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
这对我来说非常有用,可以找到*调用*的名称(与当前的方法相反)。 – Lambart 2013-09-27 00:50:43
`__callee__`不是这样吗? – 2015-05-22 16:32:48
伟大的解决方案马克 现在最好的解决方案。伟大的工作 – jonathanccalixto 2016-09-19 08:13:32
为Ruby 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和我的测试)。
关于Ruby 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在方法被定义的点上瓮名):
2.1.2
{:call_orig=>{:callee=>:orig, :method=>:orig},
:call_alias=>{:callee=>:myalias, :method=>:orig}}
- 1. 获取当前正在执行的方法的名称
- 2. 获取当前正在执行的当前线程的方法名称
- 3. 获取当前方法的名称
- 4. Mbunit - Gallio。获取当前正在执行的测试的名称
- 5. 函数获取当前执行文件的目录名称
- 6. 获取当前MembershipProvider名称
- 7. 如何在squeak中获取当前方法的名称?
- 8. 如何在Delphi 7中获取当前方法的名称?
- 9. 如何在静态方法中获取当前类的名称?
- 10. 在C++中获取当前方法的名称
- 11. android获取多态方法的当前活动名称
- 12. T4获取当前解决方案的执行文件名
- 13. 获取在特定线程中执行的方法的名称
- 14. 获取当前正在执行的方法
- 15. 获取当前类的名称
- 16. 获取当前VBA函数的名称
- 17. 在作业执行方法中获取当前正在执行的TRIGGER_NAME
- 18. 获取当前国家/地区名称
- 19. modx php获取当前页面名称
- 20. 获取当前模板名称?
- 21. 获取当前文件夹名称
- 22. 获取当前字段名称
- 23. iOS获取当前地址名称 - mkplacemark?
- 24. DB获取当前数据库名称
- 25. android获取当前位置名称
- 26. Rebol是否可以获取当前正在执行的脚本的名称?
- 27. 从C#中的函数中获取当前执行函数的名称
- 28. 在Go中获取当前进程(可执行文件)的名称?
- 29. 在MySQL中获取当前正在执行的存储过程名称?
- 30. 如何在运行时使用反射从当前线程获取当前方法名称?
一个用途是检查`super`是否可以在SimpleDelegator对象中调用:`def description; __getobj __。respond_to?(__ method__)?超级:'没有描述';结束' – Kris 2013-09-26 13:57:39