在Ruby中什么时候使用'require','load'或'autoload'?

pu82cl6c  于 2023-01-30  发布在  Ruby
关注(0)|答案(5)|浏览(177)

我理解Ruby中requireloadautoload之间的细微差别,但我的问题是,您如何知道使用哪一个?
除了能够将load“ Package ”在匿名模块中之外,require似乎更受欢迎。
但是autoload允许您延迟加载文件--这听起来很棒,但是我不确定您实际上比require获得了什么
一种方法比另一种更受欢迎吗?是否存在一种方法脱颖而出的情况?

7ivaypg9

7ivaypg91#

一般来说,你应该使用requireload每次都会重新加载代码,所以如果你从几个模块中加载代码,你会做很多额外的工作。autoload的懒惰在理论上听起来不错,但是很多Ruby模块会做一些事情,比如猴子修补其他类。这意味着程序中不相关部分的行为可能取决于给定的类是否已经被使用。
如果您想创建自己的自动重载器,在代码每次更改或有人点击URL时加载代码(出于开发目的,这样您就不必每次都重新启动服务器),那么使用load是合理的。

bkhjykvo

bkhjykvo2#

我的图书馆.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>

看区别。

nle07wnf

nle07wnf3#

下面是autoload相对于require优势:
autoload主要用于加速Ruby程序或Rails应用程序的初始化阶段,通过在需要资源之前不加载资源,可以大大加快速度。
另一个优点是,如果用户不使用某些特性,您可能不需要加载代码的某些部分--从而缩短加载时间并减少内存占用。

c8ib6hqw

c8ib6hqw4#

除了其他人已经告诉你的,autoload的未来是不确定的。它在Ruby 2.0中被计划弃用,但是弃用没有在2.0特性冻结之前及时完成。现在预计autoload将在Ruby 2.1中被弃用,but that is not even certain anymore

r6hnlfcb

r6hnlfcb5#

下面是每种方法的用例。

  1. load以获取程序运行时对文件所做的任何更改。
  2. autoload,通过延迟加载模块来加快库的初始化。
  3. require,当您想使用外部gem时。
  4. require_relative表示相对于当前工作目录的本地文件。
    来源:Understanding the load , autoload , require , and require_relative methods in Ruby

相关问题