我想要
require
另一个文件中的 Ruby 文件。这两个文件位于两个不同的目录中。我在第一个文件的顶部有 require second_file
。 Ruby 说它无法加载这样的文件。是因为它在不同的目录中吗?我尝试写入第二个文件的完整路径,但仍然无法加载该文件。
如何将第二个文件加载到第一个文件中?
require
将仅在一组称为“加载路径”的位置中搜索文件。您可以在脚本或 irb 会话中使用全局变量 $LOAD_PATH
查看加载路径。如果它不在加载路径中,则不会找到它。
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 的一些附加文档:
也可以这样做:
require './something.rb'
从当前目录包含。
来自文档:建议使用 requirerelative。 文档
require_relative
补充了内置方法 require,允许您加载与包含 require_relative
语句的文件相关的文件。
当您使用
require
加载文件时,您通常正在访问系统中已正确安装并可访问的功能。 require 没有提供在项目代码中加载文件的良好解决方案。这在开发阶段可能很有用,可以用于访问测试数据,甚至可以访问“锁定”在项目内部而不是供外部使用的文件。
例如,如果“test”目录中有单元测试类,并且测试“test/data”目录下有它们的数据,那么您可以在测试用例中使用如下行:
require_relative "data/customer_data_1"
例如,您有文件:
chess.rb 和 spec/test.rb
并且您想要在spec/test.rb中需要该文件。用途:
require_relative '../test.rb'
有两个点。使用一个点“./”,您将收到错误“无法加载此类文件”