gpt4 book ai didi

ruby - 发现文件 ruby​​ require 方法将加载?

转载 作者:数据小太阳 更新时间:2023-10-29 07:57:54 27 4
gpt4 key购买 nike

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

说明:$: 是预定义变量。它是一组用于搜索您可以加载需要 的文件的位置。 which 方法遍历每个路径以查找您调用它的文件。如果找到匹配项,则返回文件路径。

我假设您只是希望输出是显示所需 文件的完整文件路径的单行,例如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

关于ruby - 发现文件 ruby​​ require 方法将加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3379552/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com