ruby-on-rails – require和load之间有什么区别?
发布时间:2020-12-16 19:21:21 所属栏目:百科 来源:网络整理
导读:使用有什么区别: require 'digest' 和 load 'digest' 解决方法 如果您需要两次相同的文件,它将只加载和评估一次.另一方面,load每次都加载并评估文件.实际文件名的解析方式也存在差异( thanks,Saurabh). 这实际意味着什么? 假设我们有一个库foo # foo.rbcla
使用有什么区别:
require 'digest' 和 load 'digest' 解决方法
如果您需要两次相同的文件,它将只加载和评估一次.另一方面,load每次都加载并评估文件.实际文件名的解析方式也存在差异(
thanks,Saurabh).
这实际意味着什么? 假设我们有一个库foo # foo.rb class Foo def bar puts 'bar' end def quux puts 'quux' end end 然后我们有一个文件,它进行一些非幂等操作.说,取消定义一个方法 # mod.rb class Foo undef :bar end 然后,如果我们需要mod.rb两次,没有什么不好的事情发生. bar成功未定义. # main.rb require './foo' Foo.instance_methods(false) # => [:bar,:quux] require './mod' require './mod' Foo.instance_methods(false) # => [:quux] 但是如果我们加载mod.rb两次,那么第二次undef操作将失败,因为方法已经消失: # main.rb require './foo' Foo.instance_methods(false) # => [:bar,:quux] load 'mod.rb' load 'mod.rb' Foo.instance_methods(false) # => # ~> mod.rb:2:in `<class:Foo>': undefined method `bar' for class `Foo' (NameError) # ~> from mod.rb:1:in `<top (required)>' # ~> from -:6:in `load' # ~> from -:6:in `<main>' 要求没有错误,因为在这种情况下,undef只发生一次.当然,这个例子非常人为,但我希望它说明了这一点. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |