何时在Ruby中使用`require`,`load`或`autoload`?
题
我理解Ruby中 require
, load
和 autoload
之间的细微差别,但我的问题是,你怎么知道哪一个到使用?
除了能够“包裹”之外匿名模块中的 load
, require
似乎是首选。
但是 autoload
允许你延迟加载文件 - 这听起来很棒,但我不确定你获得了什么 require
一种方法优于另一种吗?是否存在一种方法脱颖而出的情况?
解决方案
通常,您应该使用 require
。 load
每次都会重新加载代码,所以如果你从几个模块中执行它,你将会做很多额外的工作。 autoload
的懒惰在理论上听起来不错,但是许多Ruby模块执行诸如猴子修补其他类之类的操作,这意味着程序中不相关部分的行为可能取决于是否使用了给定的类还是没有。 autoload
正在弃用,因此使用它应该避免。
如果您想制作自己的自动重新加载器,每次更改时或每次有人点击URL时加载您的代码(为了开发目的,您不必每次都重新启动服务器),然后使用加载
是合理的。
其他提示
mylibrary.rb
puts "I was loaded!"
class MyLibrary
end
尝试irb
irb(main):001:0> require 'mylibrary'
I was loaded!
=> true
irb(main):001:0> autoload :MyLibrary, 'mylibrary'
=> nil
irb(main):002:0> MyLibrary.new
I was loaded!
=> #<MyLibrary:0x0b1jef>
看到差异。
这是您通过 autoload
获得的 require
:
autoload
主要用于加速Ruby程序或Rails应用程序的初始化阶段。通过不加载资源直到需要它们,它可以加速一些事情。
另一个优点是,如果用户不使用某些功能,您可能不需要加载代码的某些部分 - 从而缩短加载时间并减少内存占用。
除了其他人已经告诉过你的内容之外, autoload
的未来还不确定。它计划在Ruby 2.0中弃用,但是对于2.0功能冻结没有及时弃用。现在预计 autoload
将在Ruby 2.1,中弃用,但那是甚至不再确定。
不隶属于 StackOverflow