1

我尝试获取调用当前方法的方法的名称

def first_method
  my_method
end

def second_method
  my_method
end

def my_method
  puts "called from: #{method_name}"
end

和预期的输出:

“调用自:first_method”

“调用自:last_method”

4

1 回答 1

2
def a
  c
end
def b
  c
end
def c
  p caller
end

a
#=> ["/Users/phrogz/Desktop/tmp.rb:2:in `a'", "/Users/phrogz/Desktop/tmp.rb:11:in `<main>'"]
b
#=> ["/Users/phrogz/Desktop/tmp.rb:5:in `b'", "/Users/phrogz/Desktop/tmp.rb:12:in `<main>'"]

您可以使用正则表达式caller[0][/`(.+?)'/,1]来匹配第一个中的名称。

这个答案对 Ruby 2.0+ 有更好的解决方案

另见:https ://github.com/banister/binding_of_caller

于 2013-04-16T13:03:14.470 回答