`autoload` 会引发错误,但 `require` 不会 (ruby)

2023-12-19

在我的 Ruby 程序中,我试图延迟加载一个库(crack http://github.com/jnunemaker/crack/tree/master对于好奇的人)。

如果我这样做:

require 'rubygems'
require 'crack'

一切正常。但是,当我尝试这样做时:

require 'rubygems'
autoload :Crack, 'crack'

引发 LoadError。 (没有要加载的文件——破解)

为什么会出现这个错误?是因为“crack”(以及我的其他用户安装的 gem)不在我的 $LOAD_PATH 中吗?

edit:

此外,autoload与标准库一起使用:

autoload :Yaml, 'yaml'

工作正常,并且不会引发任何错误。


您需要通过执行以下操作将“crack”gem 添加到您的 $LOAD_PATH:

gem 'crack'

这是必要的,因为 RubyGems 将 Kernel#require 替换为一种方法,该方法在必要时尝试在需要之前“激活”gem,但不会对 Kernel#load 执行相同的操作 - 并且 autoload 调用会在后端加载。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

`autoload` 会引发错误,但 `require` 不会 (ruby) 的相关文章

随机推荐