小编Mar*_*k W的帖子

将目录添加到$ LOAD_PATH(Ruby)

我已经看到两种常用的技术,用于将当前正在执行的文件的目录添加到$ LOAD_PATH(或$ :).如果你不使用宝石,我会看到这样做的好处.显然,一个看起来比另一个看起来更冗长,但有理由与其中一个相提并论吗?

第一个,冗长的方法(可能是过度杀伤):

$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__))) unless $LOAD_PATH.include?(File.expand_path(File.dirname(__FILE__)))
Run Code Online (Sandbox Code Playgroud)

而且更直接,快速和肮脏:

$:.unshift File.dirname(__FILE__)
Run Code Online (Sandbox Code Playgroud)

有理由和其他人一起去吗?

ruby rubygems load-path

90
推荐指数
5
解决办法
9万
查看次数

何时在Ruby中使用`require`,`load`或`autoload`?

我理解之间的细微差异require,load以及autoload在Ruby中,但我的问题是,你怎么知道该用哪一个呢?

除了能够load在匿名模块中"包装"a之外,require似乎更受欢迎.

但是然后autoload允许你懒惰加载文件 - 听起来很棒但我不确定你获得了什么require

一种方法比另一种方法更受欢迎吗?是否存在一种方法脱颖而出的情况?

ruby module

61
推荐指数
4
解决办法
2万
查看次数

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

在我的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)

工作正常,并没有错误.

ruby rubygems

3
推荐指数
1
解决办法
773
查看次数

标签 统计

ruby ×3

rubygems ×2

load-path ×1

module ×1