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