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

Mar*_*k W 3 ruby rubygems

在我的Ruby程序中,我试图懒惰加载一个库(好奇的破解).

如果我这样做:

require 'rubygems'
require 'crack'
Run Code Online (Sandbox Code Playgroud)

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

require 'rubygems'
autoload :Crack, 'crack'
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:

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

autoload :Yaml, 'yaml'
Run Code Online (Sandbox Code Playgroud)

工作正常,并没有错误.

Gre*_*ell 5

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

gem 'crack'
Run Code Online (Sandbox Code Playgroud)

这是必要的,因为RubyGems将一个方法替换为内核#require,该方法在需要之前尝试"激活"gem,但是对于内核#load没有做同样的事情 - 并且后端上的自动加载调用加载.