$0是顶层Ruby程序的变量,但是否有一个变量用于当前方法?
$0
kokeuurv1#
甚至比我的第一个答案更好,你可以使用__method__:
__method__
class Foo def test_method __method__ end end
这将返回一个符号-例如,:test_method。要以字符串形式返回方法名称,请改为调用__method__.to_s。
:test_method
__method__.to_s
**注意:**需要Ruby 1.8.7。
new9mtju2#
根据实际需要,可以使用__method__或__callee__,它们以符号的形式返回当前正在执行的方法的名称。在ruby1.9上,它们的行为完全相同(就文档和我的测试而言)。在ruby 2.1和2.2中,如果调用已定义方法的别名,__callee__的行为会有所不同。两者的文档是不同的:
__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}}
xggvc2p63#
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
gmol16394#
对于Ruby 1.9+,我建议使用__callee__
5jdjgkvh5#
我在视图文件中检索方法名称时遇到了同样的问题。我通过以下方法得到了解决方案
params[:action] # it will return method's name
如果你想得到控制器的名字
params[:controller] # it will return you controller's name
5条答案
按热度按时间kokeuurv1#
甚至比我的第一个答案更好,你可以使用
__method__
:这将返回一个符号-例如,
:test_method
。要以字符串形式返回方法名称,请改为调用__method__.to_s
。**注意:**需要Ruby 1.8.7。
new9mtju2#
根据实际需要,可以使用
__method__
或__callee__
,它们以符号的形式返回当前正在执行的方法的名称。在ruby1.9上,它们的行为完全相同(就文档和我的测试而言)。
在ruby 2.1和2.2中,如果调用已定义方法的别名,
__callee__
的行为会有所不同。两者的文档是不同的:__method__
:“当前方法定义时的名称”(即定义时的名称)__callee__
:“当前方法的调用名称”(即调用时的名称)测试脚本:
1.9.3输出:
2.1.2输出(
__callee__
返回别名,但__method__
返回方法定义时的名称):xggvc2p63#
http://snippets.dzone.com/posts/show/2785:
gmol16394#
对于Ruby 1.9+,我建议使用
__callee__
5jdjgkvh5#
我在视图文件中检索方法名称时遇到了同样的问题。我通过以下方法得到了解决方案
如果你想得到控制器的名字