3

在我的 Ruby 程序中,我试图延迟加载一个库(好奇的破解)。

如果我这样做:

require 'rubygems'
require 'crack'

一切正常。但是,当我尝试这个时:

require 'rubygems'
autoload :Crack, 'crack'

引发了 LoadError。(没有这样的文件可以加载——破解

为什么会引发此错误?是因为“crack”(以及我的其他用户安装的 gem)不在我的 $LOAD_PATH 中吗?

编辑:

此外,autoload确实适用于标准库:

autoload :Yaml, 'yaml'

工作正常,并且不会引发错误。

4

1 回答 1

5

您需要通过执行以下操作将“破解”gem 添加到您的 $LOAD_PATH 中:

gem 'crack'

这是必要的,因为 RubyGems 将 Kernel#require 替换为在必要时尝试在需要它之前“激活”gem 的方法,但不会对 Kernel#load 做同样的事情 - 并且 autoload 在后端调用 load。

于 2009-05-11T20:04:47.327 回答