module ActionController extend ActiveSupport::Autoload autoload :Base autoload :Caching autoload :Metal autoload :Middleware end
有人能详细说明autoad方法的作用吗?
wljmcqd81#
Autoload确保类或模块在需要时自动加载。Peter库珀有一篇很好的文章,名为"Ruby Techniques Revealed: Autoload",解释了所需的差异。我不想在这里重复他的例子:-)
2cmtqfgy2#
autoload是当代码在模块中执行时require的替代方法。主要的功能区别是代码实际执行的时间。autoload经常在ruby gems中使用,以加快应用程序的加载时间。使用autoload时,第一次使用module常量时,它会从指定的文件中加载。使用require时,它会在需要时立即执行。注意,autoload的Ruby实现需要同时使用module和filename,但示例中的Rails版本将filename设置为可选。作为一个例子,实际上没有比你的问题更多的东西,当你使用ActionController::Base,ActionController::Caching等时,这些模块会被执行。
zxlwwiss3#
Kernel#autoload方法通过延迟加载模块来加速库的初始化。它不会加载不需要的库或框架代码。Ruby版本有两个参数:模块(可以是字符串或符号)和文件名(字符串),并注册首次访问该模块时要加载的文件名。
Kernel#autoload
autoload :Payment, "lib/modules/payment.rb"
Ruby on Rails通过其Active Support框架覆盖Ruby的autoload方法,提供了自己的autoload方法。它允许你基于Rails命名约定定义自动加载,并根据模块名自动猜测文件名。
autoload
autoload :SecurePassword
如果没有提供路径,Rails通过连接常量名和当前模块名并生成其下划线和小写形式来猜测路径,最后,它通过调用super来调用Ruby的autoload方法并传递模块名和生成的路径。有关更多详细信息,请查看:Autoloading Modules in Rails
3条答案
按热度按时间wljmcqd81#
Autoload确保类或模块在需要时自动加载。Peter库珀有一篇很好的文章,名为"Ruby Techniques Revealed: Autoload",解释了所需的差异。我不想在这里重复他的例子:-)
2cmtqfgy2#
autoload是当代码在模块中执行时require的替代方法。主要的功能区别是代码实际执行的时间。autoload经常在ruby gems中使用,以加快应用程序的加载时间。
使用autoload时,第一次使用module常量时,它会从指定的文件中加载。使用require时,它会在需要时立即执行。注意,autoload的Ruby实现需要同时使用module和filename,但示例中的Rails版本将filename设置为可选。
作为一个例子,实际上没有比你的问题更多的东西,当你使用ActionController::Base,ActionController::Caching等时,这些模块会被执行。
zxlwwiss3#
在Ruby中自动加载
Kernel#autoload
方法通过延迟加载模块来加速库的初始化。它不会加载不需要的库或框架代码。Ruby版本有两个参数:模块(可以是字符串或符号)和文件名(字符串),并注册首次访问该模块时要加载的文件名。
在Rails中自动加载
Ruby on Rails通过其Active Support框架覆盖Ruby的
autoload
方法,提供了自己的autoload
方法。它允许你基于Rails命名约定定义自动加载,并根据模块名自动猜测文件名。
如果没有提供路径,Rails通过连接常量名和当前模块名并生成其下划线和小写形式来猜测路径,最后,它通过调用super来调用Ruby的autoload方法并传递模块名和生成的路径。
有关更多详细信息,请查看:Autoloading Modules in Rails