在ruby中获取调用方法的文件名

时间:2015-11-11 05:17:07

标签: ruby

我有一个方法foo,它在脚本script001.rb中调用 我应该如何编写foo方法,以便它返回调用它的脚本的文件名?

2 个答案:

答案 0 :(得分:8)

您可以使用Kernel#caller返回当前执行堆栈 - 包含file:linefile:line: in 'method'形式的字符串的数组:

def foo
  caller[0][/[^:]+/]  # OR  caller[0].split(':')[0]
end

答案 1 :(得分:7)

为避免需要处理caller样式字符串,您可以使用Kernel#caller_locations。它会返回一组Thread::Backtrace::Location个对象,它们有一些方便的方法。

要获取文件名,在您的情况下,您可以使用#path方法:

def foo
  caller_locations.first.path
end