为什么Ruby中的require 'file'无法工作,但是require './file'可以?

11

我有一个充满Ruby文件的文件夹,当我试图在同一目录中的一个文件中使用 require 'file' 来要求另一个文件时,会出现 LoadError ,但是当我使用 require './file' 时,一切都正常工作。 有人能解释一下为什么会这样发生,是否有任何方法可以不添加 ./ 到文件而要求文件?

(目录图片): alt text


可能是什么是Ruby中require_relative和require的区别?的重复问题。 - Ciro Santilli OurBigBook.com
3个回答

15
如果你想要require一个文件,而不是从系统的$LOAD_PATH中获取,而是相对于你正在require的文件所在的目录,那么你应该使用require_relative。(正如您所见,它并没有得到广泛的记录。)

3
你的加载路径中没有当前目录。
请检查$LOAD_PATH变量的内容。

0

虽然这是一篇很旧的帖子,但我认为对于初学者来说,一些额外的信息会非常有用。

最好的理解 require 的方式是与 UNIX 的 $PATH 变量相关联。简单回顾一下,UNIX 中的 $PATH 变量是可执行文件所在目录的列表。因此,当您在任何 UNIX 终端上键入程序名称时,计算机会在 $PATH 变量指定的目录中查找可执行文件。require 做的事情非常类似。例如,当您在 Ruby 文件顶部写入 require 'set' 时,您告诉 Ruby 在一堆目录中查找名为 set.rb(Ruby 的 set 库)的库。

那么 Ruby 在哪里查找 set.rb 呢?好吧,再次提到,Ruby 有一个非常类似于 UNIX 的 $PATH 变量的东西。它是全局变量 $LOAD_PATH,有时也被称为其丑陋且不描述性的别名 $:(我不建议使用,尽管它很短)。它是一个目录名称数组,在遇到 require 时 Ruby 查找其中的目录。

这里有一篇很好的信息性文章在这里,你可以了解更多关于requireloadrequire_relative的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接