我有一个充满Ruby文件的文件夹,当我试图在同一目录中的一个文件中使用 require 'file'
来要求另一个文件时,会出现 LoadError
,但是当我使用 require './file'
时,一切都正常工作。 有人能解释一下为什么会这样发生,是否有任何方法可以不添加 ./
到文件而要求文件?
(目录图片):
我有一个充满Ruby文件的文件夹,当我试图在同一目录中的一个文件中使用 require 'file'
来要求另一个文件时,会出现 LoadError
,但是当我使用 require './file'
时,一切都正常工作。 有人能解释一下为什么会这样发生,是否有任何方法可以不添加 ./
到文件而要求文件?
(目录图片):
require
一个文件,而不是从系统的$LOAD_PATH
中获取,而是相对于你正在require
的文件所在的目录,那么你应该使用require_relative
。(正如您所见,它并没有得到广泛的记录。)虽然这是一篇很旧的帖子,但我认为对于初学者来说,一些额外的信息会非常有用。
最好的理解 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 查找其中的目录。
这里有一篇很好的信息性文章在这里,你可以了解更多关于require
、load
和require_relative
的信息。