3 回答
TA贡献1909条经验 获得超7个赞
require_relativerequire
require_relative('path')require(File.expand_path('path', File.dirname(__FILE__)))__FILE__LoadError
require_relative 'a'和 require_relative './a'相对于 当前文件 (__FILE__).这是您需要在库中使用的内容,因为您不希望结果依赖于调用方的当前目录。 eval('require_relative("a.rb")')提高 LoadError因为 __FILE__内部未定义 eval.这就是为什么你不能用 require_relative在RSpec测试中, eval爱德。
require:
require './a.rb'相对于 当前目录require 'a.rb'使用搜索路径( $LOAD_PATH)要求。它找不到相对于当前目录或路径的文件。 这是不可能的 require_relative因为文档说只有当“文件名不解析到绝对路径”时才会进行路径搜索(即以 /或 ./或 ../),这种情况总是发生在 File.expand_path.
require
require '/a.rb'和 require_relative '/a.rb'两者都需要绝对路径。
读源
VALUE rb_f_require(VALUE obj, VALUE fname) {
return rb_require_safe(fname, rb_safe_level());}VALUE rb_f_require_relative(VALUE obj, VALUE fname) {
VALUE base = rb_current_realfilepath();
if (NIL_P(base)) {
rb_loaderror("cannot infer basepath");
}
base = rb_file_dirname(base);
return rb_require_safe(rb_file_absolute_path(fname, base), rb_safe_level());}require_relative('path')require(File.expand_path('path', File.dirname(__FILE__)))rb_file_absolute_path =~ File.expand_path rb_file_dirname1 =~ File.dirname rb_current_realfilepath =~ __FILE__
- 3 回答
- 0 关注
- 828 浏览
添加回答
举报
