ruby - `autoload` 引发错误但 `require` 不引发错误( ruby )

标签 ruby rubygems

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

如果我这样做:

require 'rubygems'
require 'crack'

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

require 'rubygems'
autoload :Crack, 'crack'

引发 LoadError。 (没有要加载的文件 -- 破解)

为什么会出现这个错误?是因为“破解”(以及我的其他用户安装的 gem)不在我的 $LOAD_PATH 中吗?

编辑:

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

autoload :Yaml, 'yaml'

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

最佳答案

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

gem 'crack'

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

关于ruby - `autoload` 引发错误但 `require` 不引发错误( ruby ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/849622/

相关文章:

ruby-on-rails - 找不到 OSX bundler 安装命令

Ruby 正则表达式不匹配

ios - RubyMotion 未加载 AudioToolbox 框架

ruby - ruby安装错了吗?

ruby-on-rails - 为什么我每次打开新终端都必须安装 Rails?

ruby-on-rails - OSX 上的 Ruby on Rails - 我是否搞砸了安装?

ruby-on-rails - 是否有 Ruby gems 的版本管理器?

ruby-on-rails - Rails Rspec - 未定义的方法 `session'

html - 如何使悬停后面的内容可点击?

ruby-on-rails - 如何将 Rails 中的自定义环境设为默认环境?