现在我的代码就是这样的:
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'?
答案 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]
。