加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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只发生一次.当然,这个例子非常人为,但我希望它说明了这一点.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读