`autoload`引发错误,但`require`没有(ruby)

时间:2009-05-11 19:20:39

标签: ruby rubygems

在我的Ruby程序中,我正在尝试延迟加载一个库(crack以获得好奇心。)

如果我这样做:

require 'rubygems'
require 'crack'

一切都很好。但是,当我尝试这个时:

require 'rubygems'
autoload :Crack, 'crack'

引发LoadError。 (没有这样的文件加载 - 破解

为什么会出现此错误?是因为'crack'(因此我的其他用户安装的宝石)不在我的$ LOAD_PATH中吗?

编辑:

此外,autoload适用于标准库:

autoload :Yaml, 'yaml'

工作正常,不会引起任何错误。

1 个答案:

答案 0 :(得分:5)

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

gem 'crack'

这是必要的,因为RubyGems将一个方法替换为内核#require,并在必要时尝试“激活”gem,但不会对内核#load执行相同的操作 - 并且自动加载调用后端加载。