在Ruby中,Required_Relative和Required之间有什么区别?

在Ruby中,Required_Relative和Required之间有什么区别?

.之间的区别是什么?require_relativerequire在鲁比?



GCT1015
浏览 696回答 3
3回答

墨色风雨

只要看看博士:require_relative补充内建法require通过允许加载相对于包含require_relative声明。例如,如果在“test”目录中有单元测试类,而在test“test/data”目录下有它们的数据,那么您可以在测试用例中使用如下一行:require_relative "data/customer_data_1"

jeck猫

require_relative的一个方便子集。requirerequire_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__
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Ruby