我理解Ruby中require、load和autoload之间的细微差别,但我的问题是,您如何知道使用哪一个?除了能够将load“ Package ”在匿名模块中之外,require似乎更受欢迎。但是autoload允许您延迟加载文件--这听起来很棒,但是我不确定您实际上比require获得了什么一种方法比另一种更受欢迎吗?是否存在一种方法脱颖而出的情况?
require
load
autoload
7ivaypg91#
一般来说,你应该使用require。load每次都会重新加载代码,所以如果你从几个模块中加载代码,你会做很多额外的工作。autoload的懒惰在理论上听起来不错,但是很多Ruby模块会做一些事情,比如猴子修补其他类。这意味着程序中不相关部分的行为可能取决于给定的类是否已经被使用。如果您想创建自己的自动重载器,在代码每次更改或有人点击URL时加载代码(出于开发目的,这样您就不必每次都重新启动服务器),那么使用load是合理的。
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>
看区别。
nle07wnf3#
下面是autoload相对于require优势:autoload主要用于加速Ruby程序或Rails应用程序的初始化阶段,通过在需要资源之前不加载资源,可以大大加快速度。另一个优点是,如果用户不使用某些特性,您可能不需要加载代码的某些部分--从而缩短加载时间并减少内存占用。
c8ib6hqw4#
除了其他人已经告诉你的,autoload的未来是不确定的。它在Ruby 2.0中被计划弃用,但是弃用没有在2.0特性冻结之前及时完成。现在预计autoload将在Ruby 2.1中被弃用,but that is not even certain anymore。
r6hnlfcb5#
下面是每种方法的用例。
require_relative
5条答案
按热度按时间7ivaypg91#
一般来说,你应该使用
require
。load
每次都会重新加载代码,所以如果你从几个模块中加载代码,你会做很多额外的工作。autoload
的懒惰在理论上听起来不错,但是很多Ruby模块会做一些事情,比如猴子修补其他类。这意味着程序中不相关部分的行为可能取决于给定的类是否已经被使用。如果您想创建自己的自动重载器,在代码每次更改或有人点击URL时加载代码(出于开发目的,这样您就不必每次都重新启动服务器),那么使用
load
是合理的。bkhjykvo2#
我的图书馆.rb
在irb中尝试
看区别。
nle07wnf3#
下面是
autoload
相对于require
优势:autoload
主要用于加速Ruby程序或Rails应用程序的初始化阶段,通过在需要资源之前不加载资源,可以大大加快速度。另一个优点是,如果用户不使用某些特性,您可能不需要加载代码的某些部分--从而缩短加载时间并减少内存占用。
c8ib6hqw4#
除了其他人已经告诉你的,
autoload
的未来是不确定的。它在Ruby 2.0中被计划弃用,但是弃用没有在2.0特性冻结之前及时完成。现在预计autoload
将在Ruby 2.1中被弃用,but that is not even certain anymore。r6hnlfcb5#
下面是每种方法的用例。
load
以获取程序运行时对文件所做的任何更改。autoload
,通过延迟加载模块来加快库的初始化。require
,当您想使用外部gem时。require_relative
表示相对于当前工作目录的本地文件。来源:Understanding the
load
,autoload
,require
, andrequire_relative
methods in Ruby