Метод require
в ruby будет искать lib_path и при необходимости загружать первые найденные подходящие файлы. Есть ли способ напечатать путь к файлу, который будет загружен. Я ищу, в идеале, встроенную функциональность, аналогичную команде which
в bash, и надеюсь, что она может быть такой же простой. Спасибо.
Обнаружьте, что метод ruby require файла загружает?
Ответы (2)
Я не знаю встроенной функциональности, но определить свою собственную несложно. Вот решение, адаптированное из этот вопрос< /а>:
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
person
michaelmichael
schedule
31.07.2010
Спасибо. У меня было ощущение, что мне нужно будет создать свою собственную реализацию. Кстати, похоже, это работает только с ruby 1.9, потому что 1.8 не включает пути отдельных драгоценных камней явно в $ :.
- person Blake Taylor; 02.08.2010
$ gem, какое имя файла # (без суффикса .rb) я использую...
person
rogerdpack
schedule
01.08.2010