Ruby require 'file' 不起作用,但 require './file' 可以。为啥?

Posted

技术标签:

【中文标题】Ruby require \'file\' 不起作用,但 require \'./file\' 可以。为啥?【英文标题】:Ruby require 'file' doesn't work but require './file' does. Why?Ruby require 'file' 不起作用,但 require './file' 可以。为什么? 【发布时间】:2011-04-17 06:25:24 【问题描述】:

我有一个充满 ruby​​ 文件的文件夹,当我尝试使用 require 'file' 在同一目录中要求另一个文件时,我得到一个 LoadError 但当我使用 require './file' 时一切正常。有人可以向我解释为什么会发生这种情况吗?如果有什么方法可以在不添加./ 的情况下要求文件?

(目录图片):

【问题讨论】:

What is the difference between require_relative and require in Ruby? 的可能重复项 【参考方案1】:

如果你想require 一个不是来自系统$LOAD_PATH 而是相对于你是requireing 来自 的文件目录的文件,你应该使用require_relative。 (如您所见,这并没有完全广泛记录。)

【讨论】:

【参考方案2】:

您的加载路径中没有当前目录。

检查 $LOAD_PATH 变量的内容

【讨论】:

【参考方案3】:

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

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

那么 Ruby 在哪里寻找 set.rb?好吧,再一次,Ruby 有一些与 UNIX 的 $PATH 变量非常相似的东西。它是全局变量 $LOAD_PATH 有时也因其丑陋且难以描述的别名 $: 而闻名(我不建议顺便使用它——尽管它可能很短)。它是 Ruby 遇到 require 时查找的目录名称数组。

有一个很好的信息帖子here,您可以在其中获得有关requireloadrequire_relative 的更多信息

【讨论】:

以上是关于Ruby require 'file' 不起作用,但 require './file' 可以。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

将CSV管道化为Ruby代码 - 如何操作?

简单的 Nokogiri 不起作用:“Nokogiri”的未定义方法调用

gulp gulp-watch不起作用

如果路径中有西里尔字符,如何使用 require

ruby 来自https://stackoverflow.com/questions/22215394/does-require-tree-require-files-inside-vendor-as

ruby_类的调用及require的使用