Ruby 什么样的路径可以;要求;默认情况下是否查找?

Ruby 什么样的路径可以;要求;默认情况下是否查找?,ruby,require,Ruby,Require,在Ruby中,我在做 require "some_file" Ruby将在某些位置查找该文件 我知道它会查找some_file.rb,但默认情况下它会在哪里查找它?$LOAD_PATH全局变量(也称为$:)包含搜索的目录列表 请参阅:这取决于您的平台,以及Ruby是如何编译的,因此没有“答案”。您可以通过运行以下命令找到答案: ruby -e 'puts $:' 不过,通常情况下,您有标准、站点和供应商Ruby库路径,包括每个路径下的arch、version和general目录。requir

在Ruby中,我在做

require "some_file"
Ruby将在某些位置查找该文件


我知道它会查找
some_file.rb
,但默认情况下它会在哪里查找它?

$LOAD_PATH全局变量(也称为$:)包含搜索的目录列表


请参阅:

这取决于您的平台,以及Ruby是如何编译的,因此没有“答案”。您可以通过运行以下命令找到答案:

ruby -e 'puts $:'
不过,通常情况下,您有标准、站点和供应商Ruby库路径,包括每个路径下的arch、version和general目录。

require(string)=>true或false


Ruby尝试加载名为string的库,如果成功,则返回true。如果文件名未解析为绝对路径,将在$:中列出的目录中搜索它。如果文件扩展名为“.rb”,则将其作为源文件加载;如果扩展名是“.so”、“.o”或“.dll”,或者当前平台上的默认共享库扩展名是什么,Ruby会将共享库作为Ruby扩展加载。否则,Ruby会尝试在名称中添加“.rb”、“.so”等。加载的功能的名称以$:.的形式添加到数组中。

Ruby查找
$LOAD\u PATH
数组中指定的所有路径

您还可以添加目录进行搜索,如下所示:

$LOAD_PATH.unshift File.expand_path('../path/from/this/file/to/another/directory', __FILE__)

通过设置RUBYLIB环境变量可以指定其他路径当在命令行上调用
ruby
时,可以使用
-I
参数提供其他搜索路径。比较

$ ruby -e 'puts $:'
输出

$ ruby -I /tmp -e 'puts $:'
注意第二个选项如何将
/tmp
列为选项。您可以使用多个
-I
来添加多个路径

您也可以将其与shebang一起使用:

#!/usr/bin/ruby -I /tmp -I /usr/local/lib/ruby

有一个“答案”。$:或$LOAD_PATH变量确实给出了搜索位置的完整列表。你自己也注意到了一种简单而干净的打印方式……啊。这取决于你如何理解这个问题:这个Ruby看起来有“答案”,但是如果你运行不同的Ruby或者在不同的平台上,它会改变。例如:MRI 1.8.7和REE将使用不同的路径,或者Darwin和LinuxMRI使用细微不同的路径。我不确定是哪个,所以对这个答案感到更舒服。这是真的,尽管我猜提问者只是想知道如何找出负载路径,而不是假设它在不同平台上是恒定的。你可能是对的。我第一次读它时,它似乎更复杂了正是我需要的。谢谢