在Ruby中,有人告诉我,这样做默认情况下查找“require”的路径是什么?
require "some_file"
红宝石时,将寻找在某些地方的文件。
我知道它寻找some_file.rb
,但它默认查找它在哪里?
在Ruby中,有人告诉我,这样做默认情况下查找“require”的路径是什么?
require "some_file"
红宝石时,将寻找在某些地方的文件。
我知道它寻找some_file.rb
,但它默认查找它在哪里?
这取决于你的平台上,如何Ruby的编译,所以不存在“的”答案。您可以通过运行发现:
ruby -e 'puts $:'
一般,不过,你有标准的,站点和供应商Ruby库的路径,包括根据每一个拱形,版本,和一般的目录。
$ LOAD_PATH全局变量(也称为$ :)包含搜索的目录列表。
参见:http://www.ruby-doc.org/core-1.9.3/Kernel.html#method-i-require
要求(串)=> true或false
红宝石试图加载库命名为字符串,返回如果成功的话属实。如果文件名不能解析为绝对路径,它将在$:中列出的目录中搜索。如果文件的扩展名为“.rb”,则将其作为源文件加载;如果扩展名是“.so”,“.o”或“.dll”,或者默认共享库扩展名是在当前平台上,那么Ruby会将共享库作为Ruby扩展名加载。否则,Ruby会尝试在名称中添加“.rb”,“.so”等。加载的功能的名称将添加到$:中的数组中。
Ruby会查找$LOAD_PATH
数组中指定的所有路径。
您还可以添加要搜索的目录,像这样:
$LOAD_PATH.unshift File.expand_path('../path/from/this/file/to/another/directory', __FILE__)
正是我需要的。谢谢! – Kilhoffer 2013-06-08 19:01:12
其他路径可以通过设置RUBYLIB环境变量
有一个“了”的回答来指定。 $:或$ LOAD_PATH变量确实给出了搜索的地点的完整列表。你自己记下了一个简单而干净的方式来打印出来...... – Perry 2012-02-28 00:04:29
啊。取决于你如何阅读这个问题:Ruby的外观有“答案”,但是如果你运行不同的Ruby或在不同的平台上,它会改变。例如:MRI 1.8.7和REE将使用不同的路径,或者Darwin和Linux MRI使用微妙的不同路径。我不确定哪个,所以对这个答案感觉更舒服。 – 2012-02-28 00:07:11
这已经足够了,尽管我猜测提问者只是想知道如何找出负载路径,而不是假设它在各个平台上是不变的。 – Perry 2012-02-28 00:13:33