在我的 Ruby 程序中,我正在尝试延迟加载一个库(好奇的 crack)。
如果我这样做:
require 'rubygems'
require 'crack'
一切正常。但是,当我尝试这样做时:
require 'rubygems'
autoload :Crack, 'crack'
引发 LoadError。 (没有要加载的文件 -- 破解)
为什么会出现这个错误?是因为“破解”(以及我的其他用户安装的 gem)不在我的 $LOAD_PATH 中吗?
编辑:
此外,autoload
确实适用于标准库:
autoload :Yaml, 'yaml'
工作正常,不会引发任何错误。
最佳答案
您需要通过执行以下操作将“破解”gem 添加到您的 $LOAD_PATH 中:
gem 'crack'
这是必要的,因为 RubyGems 将 Kernel#require 替换为一种方法,该方法会在需要时尝试“激活”gem,但不会对 Kernel#load 执行相同的操作 - 并且自动加载调用会在后端加载。
关于ruby - `autoload` 引发错误但 `require` 不引发错误( ruby ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/849622/