如何返回调用方法的字符串名称?

时间:2010-04-07 18:39:17

标签: ruby callstack

现在我的代码就是这样的:

def method_a
  self.method_b ==> 'method_b'
end

def method_b
  puts self.name_of_calling_method
end

def name_of_calling_method
  if  /`(.*)'/.match(caller.first)
    return $1
  else
    return nil
  end
end

而不是method_b打印'method_b',如何打印调用方法的名称 - 'method_a'?

2 个答案:

答案 0 :(得分:3)

当你name_of_calling_method来自method_b时,method_a在调用堆栈的上方有一个条目,因此您希望caller[1]中的name_of_calling_method而不是caller.first {1}}或caller[0]

因为您已将正则表达式放在左侧,将索引放在右侧的caller,因此nil不需要额外的method_b检查是直接调用而caller[1]nil - 您的不匹配 else案例将覆盖它。

答案 1 :(得分:2)

caller.first替换为caller[1]