Как вы можете найти имя файла, который вызвал метод в Ruby? - PullRequest
0 голосов
/ 19 августа 2011

Есть ли хороший, рекомендуемый способ получить имя файла, вызвавшего метод?Я не хочу сдавать __FILE__ каждый раз.Самое близкое, что я обнаружил, - это первый элемент Kernel.caller, который в порядке, но к которому добавлен номер вызывающей линии, например "test.rb:7".Это достаточно просто, но его использование может показаться чем-то, что может зависеть от переводчика или может измениться в будущем.

Ответы [ 2 ]

1 голос
/ 30 августа 2016

В 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

Shell:

$ ruby file2.rb
file2.rb
1 голос
/ 19 августа 2011

Возможно, это безопаснее, чем вы думаете? Я нашел этот другой пост http://snippets.dzone.com/posts/show/2787, где кто-то сделал нечто похожее на то, что вы предлагаете ...

...