`autoload`会引发错误,但`require`却不会 (ruby)[英] `autoload` raises an error but `require` does not (ruby)

本文是小编为大家收集整理的关于`autoload`会引发错误,但`require`却不会 (ruby)的处理方法,想解了`autoload`会引发错误,但`require`却不会 (ruby)的问题怎么解决?`autoload`会引发错误,但`require`却不会 (ruby)问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

在我的 Ruby 程序中,我正在尝试延迟加载库(crack 对于好奇的人).

如果我这样做:

require 'rubygems'
require 'crack'

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

require 'rubygems'
autoload :Crack, 'crack'

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

为什么会出现此错误?是不是因为"crack"(以及我的其他用户安装的 gem)不在我的 $LOAD_PATH 中?

编辑:

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

autoload :Yaml, 'yaml'

工作正常,不会引发错误.

推荐答案

您需要将 'crack' gem 添加到 $LOAD_PATH 中:

gem 'crack'

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

本文地址:https://www.itbaoku.cn/post/786648.html