ruby如何知道在require中的何处找到rspec;rspec";
在Ruby中,我可以使用带有ruby如何知道在require中的何处找到rspec;rspec";,ruby,rspec,Ruby,Rspec,在Ruby中,我可以使用带有require\u relative“file.rb” 但是为什么我能够在一个随机的Ruby文件中编写require'rspec',并让它确切地知道我指的是哪个文件 我理解(在阅读文章后)rails require正在使用$LOAD_PATH查找文件路径,但我不知道它在某些任意目录中是如何工作的。如果您使用RubyGems,或gem install在您的计算机上安装Gems,require将使用RubyGems查找您在计算机上安装的Gem的路径 下面是一个简单的脚本,
require\u relative“file.rb”
但是为什么我能够在一个随机的Ruby文件中编写require'rspec'
,并让它确切地知道我指的是哪个文件
我理解(在阅读文章后)rails require正在使用$LOAD_PATH查找文件路径,但我不知道它在某些任意目录中是如何工作的。如果您使用RubyGems,或
gem install
在您的计算机上安装Gems,require
将使用RubyGems查找您在计算机上安装的Gem的路径
下面是一个简单的脚本,使用gem探索如何解析Rspec路径:
require 'byebug'
byebug
require 'rspec'
详细解释一下。以下是重要的几点:
为了帮助您使用gems内部的代码,RubyGems重写了Ruby的require方法。(它是这样做的)。评论很清楚:
##
# When RubyGems is required, Kernel#require is replaced with our own which
# is capable of loading gems on demand.
#
# When you call <tt>require 'x'</tt>, this is what happens:
# * If the file can be loaded from the existing Ruby loadpath, it
# is.
# * Otherwise, installed gems are searched for a file that matches.
# If it's found in gem 'y', that gem is activated (added to the
# loadpath).
#
##
#当需要RubyGems时,内核#require将被我们自己的替换
#能够根据需要加载宝石。
#
#当您调用require“x”时,会发生以下情况:
#*如果文件可以从现有Ruby加载路径加载,则
#是。
#*否则,将搜索已安装的gems以查找匹配的文件。
#如果在gem“y”中找到,则该gem被激活(添加到
#加载路径)。
#
文章的其余部分将引导我们一步一步地完成require过程,查看代码;但其要点是,如果原始的require
(通过$LOAD\u PATH
)失败,它将扫描所有已安装gems的规范文件,并查看您的require是否可以使用它;如果是这样,它将激活(添加到$LOAD\u PATH
)该gem以及它所依赖的所有gem;最后,它将重新调用原始的require