理解`load`,`require`和`require_relative`

时间:2015-12-22 03:20:17

标签: ruby

我不明白导入库或模块的三种方法之间的区别。正如我目前所理解的那样,

load 'file.rb'

会将外部文件的内容导入到当前文件中,而不是:

require 'file.rb'

将执行相同的功能,但不会导入已导入的文件。

require_relative 'file.rb'

类似于require,但它将加载仅在当前目录中的文件,而require将使用搜索路径$:来查找文件。我毫不怀疑我对这三种机制的理解是有缺陷的。有人可以提供一些澄清吗?

1 个答案:

答案 0 :(得分:10)

当您要导入文件时使用

load,无论它是否已导入。仅当您要导入文件时才使用requirerequire_relative

由此可见,当导入的文件是分析对象(数据文件)时使用前者,而后者用于提供程序中使用的一些功能(程序的一部分,库,框架)。

虽然require只能处理相对于$:的路径,但require_relative是一个可以处理相对于当前目录的路径的扩展。 require_relativerequire的超集,require可以分发(尽管require_relative是使用require编写的,因此必须重写{{1}是要分发的。)