ruby-on-rails – require和load之间有什么区别?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – require和load之间有什么区别?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用有什么区别:
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只发生一次.当然,这个例子非常人为,但我希望它说明了这一点.

猜你在找的Ruby相关文章