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
而是相对于你是require
ing 来自 的文件目录的文件,你应该使用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,您可以在其中获得有关require
、load
和require_relative
的更多信息
【讨论】:
以上是关于Ruby require 'file' 不起作用,但 require './file' 可以。为啥?的主要内容,如果未能解决你的问题,请参考以下文章
简单的 Nokogiri 不起作用:“Nokogiri”的未定义方法调用
ruby 来自https://stackoverflow.com/questions/22215394/does-require-tree-require-files-inside-vendor-as