仅通过阅读以下内容无法理解如何工作Module#autolad
和工作:Module#autoload?
Module#autoload:在 mod 的命名空间中第一次访问模块(可能是字符串或符号)时注册要加载的文件名(使用 Kernel::require)。
模块#自动加载?- 如果名称在 mod 的命名空间中注册为自动加载,则返回要加载的文件名。c**有人通过一些小代码示例帮助我理解这个概念吗?
仅通过阅读以下内容无法理解如何工作Module#autolad
和工作:Module#autoload?
Module#autoload:在 mod 的命名空间中第一次访问模块(可能是字符串或符号)时注册要加载的文件名(使用 Kernel::require)。
模块#自动加载?- 如果名称在 mod 的命名空间中注册为自动加载,则返回要加载的文件名。c**有人通过一些小代码示例帮助我理解这个概念吗?
例子:
$ echo 'class AutoloadDemo; end' > autoload_demo.rb
$ ruby -e "
> p autoload? :AutoloadDemo
> p defined?(AutoloadDemo)
> autoload :AutoloadDemo, './autoload_demo'
> p autoload? :AutoloadDemo
> p defined?(AutoloadDemo)
> p AutoloadDemo
> "
nil
nil
"./autoload_demo"
"constant"
AutoloadDemo
解释:autoload
为一个常量注册一个“延迟加载”(即方法的参数符号autoload
);当在脚本中遇到该符号(在示例中AutoloadDemo
)表示的常数时,Ruby 需要与该常量(的第二个参数autoload
)关联的文件。autoload?
只不过是对“这个常量是否为自动加载而注册?”这个问题的答案。
在 Ruby 中,常量是在程序执行期间应该相同的值;它必须以大写字符开头。
持续注册是 Ruby 解释器在您调用时所做的:autoload
它说
好的,当我在下一次执行中遇到这个常量时,如果它没有定义,而不是引发 NameError 我需要这个文件并查看它是否定义了常量;如果是这样,我继续执行。
基本上,自动加载是第一次使用常量时加载 ruby 文件的一种方式。这对于第一次使用常量时的“延迟加载”或“及时加载”很有用。有关详细信息,请参阅http://www.rubyinside.com/ruby-techniques-revealed-autoload-1652.html。