我理解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,中弃用,但那是甚至不再确定

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top