默认情况下,在pry中加载了哪些库?

时间:2018-08-07 14:36:59

标签: ruby irb pry

当我在Tempfile中使用pry类时,我不使用require。

% pry -f
pry(main)> Tempfile
Tempfile < #<Class:0x00007fb5121149b8>

但是在irb中,我必须先要求tempfile

% irb
irb(main):001:0> Tempfile
NameError: uninitialized constant Tempfile
    from (irb):1
    from /Users/ironsand/.rbenv/versions/2.4.3/bin/irb:11:in `<main>'
irb(main):002:0> require 'tempfile'
=> true

因此,pry似乎默认加载了一些库。 实际加载了哪些库?

这是我的环境

 % ruby -v
ruby 2.4.3p205 (2017-12-14 revision 61247) [x86_64-darwin17]
 % irb --version
pirb 0.9.6(09/06/30)
 % pry --version
Pry version 0.11.3 on Ruby 2.4.3

2 个答案:

答案 0 :(得分:7)

您可以比较$LOADED_FEATURES来查看默认pry会话和irb会话(或纯红宝石脚本)中加载的所有内容。

简短的答案是Pry加载它需要提供自己行为的任何库。长答案太长(很可能过时,或者版本之间不同),因此无法在此处列出-最好询问您当前的环境。

最好不要依赖其他库来为您加载其依赖项,因为这些依赖项可能会更改。 (尽管在这种情况下,可能很难注意到您缺少了require,因为一切仍然有效。)

答案 1 :(得分:2)

作为$ LOADED_FEATURES的替代方案(可能有点过分),请考虑:

Gem.loaded_specs.values.each {|s| puts s.name}

仅列出具有规格的宝石

[20] pry(main)> Gem.loaded_specs.values.each {|s| puts s.name};nil
did_you_mean
coderay
method_source
pry
io-console
vls
=> nil

顺便说一句,在这个示例中,我手动加载了vls gem。