如何在Ruby中找到调用方法的文件的名称?

时间:2011-08-19 00:51:25

标签: ruby stack-trace

是否有一种很好的,推荐的方法来获取调用方法的文件的名称?我不想每次都通过__FILE__。我发现最接近的是取Kernel.caller的第一个元素,这是可以的,但是附加了调用行号,如"test.rb:7"。剥离很容易,但使用它似乎可能依赖于解释器或将来可能会改变。

2 个答案:

答案 0 :(得分:1)

也许它比你想象的更安全?我找到了另一篇帖子http://snippets.dzone.com/posts/show/2787,其中有人做了类似于你建议的事情......

答案 1 :(得分:1)

在Ruby 2.0+中,您可以使用Kernel#caller_locations执行此操作。它与caller非常相似,还有一个额外的好处,即您不需要手动解析文件名,因为它返回Thread::Backtrace::Location个对象而不是String s:

file1.rb

def some_method
  puts caller_locations.first.path
end

file2.rb

require_relative './file1'

some_method

外壳:

$ ruby file2.rb
file2.rb