在Ruby中,Required_Relative和Required之间有什么区别?.之间的区别是什么?require_relative和require在鲁比?
3 回答
jeck猫
TA贡献1909条经验 获得超7个赞
require_relative
require
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 关注
- 695 浏览
添加回答
举报
0/150
提交
取消