Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ruby如何知道在require中的何处找到rspec;rspec";_Ruby_Rspec - Fatal编程技术网

ruby如何知道在require中的何处找到rspec;rspec";

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的路径 下面是一个简单的脚本,

在Ruby中,我可以使用带有
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