$0是顶级Ruby程序的变量,但是当前方法是否有一个变量呢?
从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
甚至比我的第一个答案更好,你可以使用__method__:
class Foo
def test_method
__method__
end
end
这将返回一个符号—例如:test_method。要以字符串形式返回方法名,请调用__method__。to_s代替。
注意:这需要Ruby 1.8.7。
我得到了相同的问题检索方法名称在视图文件。我得到了答案
params[:action] # it will return method's name
如果你想获取控制器的名称
params[:controller] # it will return you controller's name
根据你的实际需要,你可以使用__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}}
推荐文章
- 如何记录Ruby代码?
- Ruby:包含的反义词是什么?Ruby数组?
- 在Ruby中,proc和lambda有什么区别?
- 如何传递参数到一个Rake任务与环境在Rails?
- 获取当前正在执行的方法的名称
- 如何在Rails中计算相对时间?
- 在Ruby中使用范围填充数组的正确方法
- “for”和“each”在Ruby中
- 我如何复制一个哈希在Ruby?
- Ruby/Rails:将Date转换为UNIX时间戳
- 我如何编码/解码HTML实体在Ruby?
- Ruby有一个string. startwith ("abc")内置方法吗?
- 如何从URL下载文件并保存在Rails中?
- 从字符串中移除子字符串
- 如何从Ruby数组中创建平均值?