2010-07-31 2 views
3

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

ответ

3

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

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 
+0

Спасибо. У меня было ощущение, что мне нужно будет создать свою собственную реализацию. Кстати, это похоже, похоже, работает с ruby ​​1.9, потому что 1.8 не включает в себя индивидуальные пути жемчужины явно в $ :. –

1

$ драгоценный камень, который имя файла # (не .rb суффикс), что я использую ...

Смежные вопросы