3 回答

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 關注
- 773 瀏覽
添加回答
舉報