在我的Ruby程序中,我正在尝试延迟加载一个库(crack以获得好奇心。)
如果我这样做:
require 'rubygems'
require 'crack'
一切都很好。但是,当我尝试这个时:
require 'rubygems'
autoload :Crack, 'crack'
引发LoadError。 (没有这样的文件加载 - 破解)
为什么会出现此错误?是因为'crack'(因此我的其他用户安装的宝石)不在我的$ LOAD_PATH中吗?
编辑:
此外,autoload
适用于标准库:
autoload :Yaml, 'yaml'
工作正常,不会引起任何错误。
答案 0 :(得分:5)
您需要通过执行以下操作将'crack'gem添加到$ LOAD_PATH:
gem 'crack'
这是必要的,因为RubyGems将一个方法替换为内核#require,并在必要时尝试“激活”gem,但不会对内核#load执行相同的操作 - 并且自动加载调用后端加载。