Ruby:autoload方法是做什么的?

5cnsuln7  于 2023-01-30  发布在  Ruby
关注(0)|答案(3)|浏览(215)
module ActionController extend ActiveSupport::Autoload

  autoload :Base
  autoload :Caching
  autoload :Metal
  autoload :Middleware
end

有人能详细说明autoad方法的作用吗?

wljmcqd8

wljmcqd81#

Autoload确保类或模块在需要时自动加载。Peter库珀有一篇很好的文章,名为"Ruby Techniques Revealed: Autoload",解释了所需的差异。我不想在这里重复他的例子:-)

2cmtqfgy

2cmtqfgy2#

autoload是当代码在模块中执行时require的替代方法。主要的功能区别是代码实际执行的时间。autoload经常在ruby gems中使用,以加快应用程序的加载时间。
使用autoload时,第一次使用module常量时,它会从指定的文件中加载。使用require时,它会在需要时立即执行。注意,autoload的Ruby实现需要同时使用module和filename,但示例中的Rails版本将filename设置为可选。
作为一个例子,实际上没有比你的问题更多的东西,当你使用ActionController::Base,ActionController::Caching等时,这些模块会被执行。

zxlwwiss

zxlwwiss3#

在Ruby中自动加载

Kernel#autoload方法通过延迟加载模块来加速库的初始化。它不会加载不需要的库或框架代码。
Ruby版本有两个参数:模块(可以是字符串或符号)和文件名(字符串),并注册首次访问该模块时要加载的文件名。

autoload :Payment, "lib/modules/payment.rb"

在Rails中自动加载

Ruby on Rails通过其Active Support框架覆盖Ruby的autoload方法,提供了自己的autoload方法。
它允许你基于Rails命名约定定义自动加载,并根据模块名自动猜测文件名。

autoload :SecurePassword

如果没有提供路径,Rails通过连接常量名和当前模块名并生成其下划线和小写形式来猜测路径,最后,它通过调用super来调用Ruby的autoload方法并传递模块名和生成的路径。
有关更多详细信息,请查看:Autoloading Modules in Rails

相关问题