什么时候在Ruby中使用`require`,`load`或`autoload`?
我理解Ruby中require
, load
和autoload
之间的细微区别,但是我的问题是,你怎么知道使用哪一个?
除了能够在匿名模块中“包装” load
, require
似乎是优选的。
但是,然后autoload
允许你懒加载文件 – 这听起来很棒,但我不确定实际上你所获得的require
一种方法比另一种更受欢迎吗? 有一种方法脱颖而出吗?
一般来说,你应该使用require
。 每次load
都会重新加载代码,所以如果你使用几个模块,你将会做很多额外的工作。 autoload
的懒惰在理论上听起来不错,但许多Ruby模块做类似猴子修补其他类的事情,这意味着程序中不相关部分的行为可能取决于给定的类是否已被使用。 autoload
也被弃用 ,所以应该避免使用它。
如果你想让自己的自动重载器在你每次更改代码的时候加载你的代码,或者每次有人点击一个URL时(为了开发的目的,所以你不必每次都重启你的服务器),那么使用load
是合理的。
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应用程序的初始化阶段。 通过在需要的时候不加载资源,它可以加快事情的速度。
另一个好处是,如果用户不使用某些function,则可能不需要加载代码的某些部分,从而缩短了加载时间并减less了内存占用。
除了别人已经告诉过你, autoload
未来还不确定。 它计划在Ruby 2.0中被弃用,但2.0版本的特性冻结不及时。 现在预计autoload
在Ruby 2.1中将被弃用, 但是这不再是确定的 。