我有一个方法foo
,它在脚本script001.rb
中调用
我应该如何编写foo
方法,以便它返回调用它的脚本的文件名?
答案 0 :(得分:8)
您可以使用Kernel#caller
返回当前执行堆栈 - 包含file:line
或file: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