在我的ruby程序中,我试图延迟加载一个库(crack对于好奇的人)。
如果我这样做:
require 'rubygems'
require 'crack'
一切正常。但是,当我试着这样做时:
require 'rubygems'
autoload :Crack, 'crack'
出现加载错误。(没有要加载的文件--crack)
为什么会出现这个错误?是因为'crack'(因此我的其他用户安装的gems)不在我的$load路径中吗?
编辑:
此外,
autoload
确实适用于标准库:autoload :Yaml, 'yaml'
工作正常,不会出错。
最佳答案
您需要通过执行以下操作将“crack”gem添加到$load_路径中:
gem 'crack'
这是必要的,因为rubygems用一个方法替换kernel require,该方法在需要gem之前尝试“激活”gem,但不会对后端的kernel加载和自动加载调用加载执行相同的操作。