3 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
require_relative
補(bǔ)充內(nèi)建法 require
通過允許加載相對(duì)于包含 require_relative
聲明。
例如,如果在“test”目錄中有單元測(cè)試類,而在test“test/data”目錄下有它們的數(shù)據(jù),那么您可以在測(cè)試用例中使用如下一行: require_relative "data/customer_data_1"

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊
require_relative
require
require_relative('path')
require(File.expand_path('path', File.dirname(__FILE__)))
__FILE__
LoadError
require_relative 'a'
和 require_relative './a'
相對(duì)于 當(dāng)前文件 (__FILE__
).這是您需要在庫中使用的內(nèi)容,因?yàn)槟幌MY(jié)果依賴于調(diào)用方的當(dāng)前目錄。 eval('require_relative("a.rb")')
提高 LoadError
因?yàn)?/trans> __FILE__
內(nèi)部未定義 eval
.這就是為什么你不能用 require_relative
在RSpec測(cè)試中, eval
愛德。
require
:
require './a.rb'
相對(duì)于 當(dāng)前目錄require 'a.rb'
使用搜索路徑( $LOAD_PATH
)要求。它找不到相對(duì)于當(dāng)前目錄或路徑的文件。 這是不可能的 require_relative
因?yàn)槲臋n說只有當(dāng)“文件名不解析到絕對(duì)路徑”時(shí)才會(huì)進(jìn)行路徑搜索(即以 /
或 ./
或 ../
),這種情況總是發(fā)生在 File.expand_path
.
require
require '/a.rb'
和 require_relative '/a.rb'
兩者都需要絕對(duì)路徑。
讀源
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 關(guān)注
- 795 瀏覽
添加回答
舉報(bào)