Показать полный путь к файлу ruby ​​при его загрузке - PullRequest
11 голосов
/ 19 января 2009

При чтении исходного кода я всегда хочу знать полный путь к файлу при его загрузке, есть ли в ruby ​​какой-либо метод обратного вызова для достижения этого или какой-либо другой способ сделать это? заранее спасибо.

РЕДАКТИРОВАТЬ Пояснения к комментариям:

Я хочу знать, где находится загруженный «somefile», пока я выполняю эту строку: «load somefile»

Ответы [ 5 ]

16 голосов
/ 06 июля 2009

Показать путь к файлу в Ruby

Как насчет простого (из быстрого теста в Кемпинг ):

File.expand_path(File.dirname(__FILE__))

10 голосов
/ 19 января 2009

Лучший способ, который я могу придумать, это исправить модуль Kernel. В соответствии с docs Kernel::load ищет $: для имени файла. Мы можем сделать то же самое и напечатать путь, если найдем его.

module Kernel
  def load_and_print(string)
    $:.each do |p|
      if File.exists? File.join(p, string)
        puts File.join(p, string)
        break
      end
    end
    load_original(string)
  end

  alias_method :load_original, :load
  alias_method :load, :load_and_print

end

Мы используем alias_method для хранения оригинального load метода, который мы вызываем в конце нашего.

3 голосов
/ 29 мая 2011

Ответ Гордона Уилсона отличный, просто хотел добавить, что вы также можете увидеть , какие библиотеки были загружены (и их полный путь!), Посмотрев на вывод переменной $ "(возвращает массив абсолютных имен файлов)

например. путь к последней загруженной библиотеке находится в конце массива

0 голосов
/ 16 января 2015

Чтобы получить полный путь к файлу, вы должны собрать строку следующим образом (где yourfileobject является объектом класса File в Ruby).

File.expand_path(File.dirname(yourfileobject)) + "/" + yourfileobject.path
0 голосов
/ 19 января 2009

Мне любопытно, почему вы используете load вместо require - в течение всего моего времени, используя Ruby. Мне никогда не приходилось использовать load.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...