我需要在Ruby 1.8中获取词法封闭方法的名称; e.g。
def foo
this_method = __callee__ # => 'foo'
end
上面的代码在Ruby 1.9中有效,但在1.8中失败,因为1.9中引入了__callee__。
有关在1.8中执行此操作的任何建议吗? 内核#caller 看起来很有前途,但似乎给了我调用堆栈,从方法的调用者开始,而不是方法本身。
我想我可以抛出一个异常,抓住它,并抓住异常#backtrace 数组中的第一个元素,但我的直觉告诉我这将是缓慢的。
答案 0 :(得分:5)
在Ruby 1.8.7上有__method__
,不确定1.8.6。
无论如何,您可以修补Kernel
模块:
module Kernel
# Defined in ruby 1.9
unless defined?(__callee__)
def __callee__
caller[0] =~ /`([^']*)'/ and $1
end
end
end
答案 1 :(得分:2)
您是否检查过“backports”宝石是否有它?