Найти файл ruby ​​require метод будет загружен? - PullRequest
3 голосов
/ 31 июля 2010

Метод require в ruby ​​будет искать lib_path и загружать первые найденные файлы, если это необходимо.Есть ли в любом случае распечатать путь к файлу, который будет загружен.Я ищу идеально встроенную функциональность, аналогичную команде which в bash, и надеюсь, что она может быть такой простой.Спасибо.

Ответы [ 2 ]

3 голосов
/ 01 августа 2010

Я не знаю встроенной функциональности, но определить свою собственную не сложно.Вот решение, адаптированное из этого вопроса :

def which(string)
  $:.each do |p|
    if File.exist? File.join(p, string)
      puts File.join(p, string)
      break
    end
  end
end

which 'nokogiri'
#=> /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri

Объяснение: $: - это предопределенная переменная.Это массив мест для поиска файлов, которые вы можете load или require.Метод which выполняет итерацию по каждому пути в поисках файла, для которого вы его вызвали.Если он находит совпадение, он возвращает путь к файлу.

Я предполагаю, что вы просто хотите, чтобы вывод представлял собой одну строку, показывающую полный путь файла required, например which.Если вы также хотите увидеть файлы, которые ваш файл required будет загружать сам, может подойти что-то вроде решения в связанном вопросе:

module Kernel
  def require_and_print(string)
    $:.each do |p|
      if File.exist? File.join(p, string)
        puts File.join(p, string)
        break
      end
    end
    require_original(string)
  end

  alias_method :require_original, :require
  alias_method :require, :require_and_print

end

require 'nokogiri'
#=>  /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri
#    /opt/local/lib/ruby1.9/gems/1.9.1/gems/rubygems-update-1.3.5/lib/rbconfig
#    /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/xml
#    /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/xml/pp
#    /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/xml/sax
#    /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/xml/node
#    /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/xml/xpath
#    /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/xslt
#    /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/html
#    /opt/local/lib/ruby1.9/gems/1.9.1/gems/nokogiri-1.4.1/lib/nokogiri/css
#    /opt/local/lib/ruby1.9/1.9.1/racc/parser.rb  
1 голос
/ 01 августа 2010

$ gem, какое имя файла # (без суффикса .rb) я использую ...

...