39

我试图要求我在另一个文件中创建的 rake 文件。这两个文件位于两个不同的目录中。我在我的第一个文件的顶部有要求,要求后的引号内有第二个文件的名称。它告诉我它无法加载这样的文件。这是否意味着因为它在不同的目录中找不到它?我尝试保留第二个文件的完整路径,但它仍然无法加载该文件。有谁知道我如何将第二个文件加载到第一个文件中?

提前致谢

4

4 回答 4

68

require将仅在称为“加载路径”的一组位置中搜索文件。$LOAD_PATH您可以通过在脚本或 irb 会话中使用全局变量来查看加载路径。如果它不在加载路径中,它将找不到它。

Ruby 1.9 引入require_relative了以当前文件位置为起点的搜索。

# Will search $LOAD_PATH for file. 
require 'test/unit'
# Notice the '/' which tells it to look in the 
# 'test' folder for a file named 'unit.rb'

# Will look in current folder of file
require_relative 'my_folder/my_file'
# Will search in 'my_folder' for the file 'my_file.rb'

请注意,这require_relative在 irb 中不起作用。

另请注意,如果您真的想使用require,可以通过向$LOAD_PATH变量添加位置来启动脚本。

$LOAD_PATH << File.join('users', 'yourusername', 'your_folder')
# or
$LOAD_PATH << File.dirname(__FILE__)
# The second one enables you to move the file around on your
# system and still operate correctly
require 'my_file'

以下是 Ruby-Doc 的一些附加文档:

于 2013-05-31T12:12:47.910 回答
12

也可以这样做:

require './something.rb'

从当前目录包含。

于 2016-04-09T12:04:41.947 回答
11

来自文档:它建议使用 require relative。文档

require_relativerequire_relative通过允许您加载与包含该语句的文件相关的文件来补充内置方法 require 。

当您使用require加载文件时,您通常会访问系统中已正确安装并可以访问的功能。require 没有提供在项目代码中加载文件的良好解决方案。这在开发阶段可能很有用,用于访问测试数据,甚至用于访问“锁定”在项目内部、不打算供外部使用的文件。

例如,如果您在“test”目录中有单元测试类,并且在测试“test/data”目录中有它们的数据,那么您可以在测试用例中使用这样的行:

require_relative "data/customer_data_1"
于 2013-05-31T12:07:06.577 回答
1

例如,您有文件:

chess.rb 和 spec/test.rb

并且您想要求 spec/test.rb 中的文件。利用:

require_relative '../test.rb'

有两个点。使用一个点 './' 您将收到错误“无法加载此类文件”

于 2018-11-06T11:11:56.280 回答