【发布时间】:2010-07-31 19:39:48
【问题描述】:
ruby 中的require 方法将搜索 lib_path 并在需要时加载找到的第一个匹配文件。无论如何要打印要加载的文件的路径。我正在寻找理想的内置功能,类似于 bash 中的 which 命令,并希望它也可以那么简单。谢谢。
【问题讨论】:
ruby 中的require 方法将搜索 lib_path 并在需要时加载找到的第一个匹配文件。无论如何要打印要加载的文件的路径。我正在寻找理想的内置功能,类似于 bash 中的 which 命令,并希望它也可以那么简单。谢谢。
【问题讨论】:
我不知道内置功能,但定义自己的功能并不难。这是改编自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
【讨论】:
$ gem which filename # (no .rb suffix) 是我使用的...
【讨论】: