代码之家  ›  专栏  ›  技术社区  ›  ironsand

在Pry中默认加载哪些库?

  •  2
  • ironsand  · 技术社区  · 6 年前

    当我使用 Tempfile 班在 pry ,我不使用需要它。

    % 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
    

    所以看起来 窥探 默认情况下加载一些库。 实际加载了哪些库?

    这是我的环境

     % 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 回复  |  直到 6 年前
        1
  •  2
  •   Peter Camilleri    6 年前

    作为$loaded_功能的替代方案,可能有点过分,请考虑:

    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。

        2
  •  7
  •   matthewd    6 年前

    你可以比较 $LOADED_FEATURES 查看默认加载的所有内容 pry 会话vs irb 会话(或纯Ruby脚本)。

    简单的答案是,无论需要哪个库来提供自己的行为,Pry都会加载这些库。长的答案太长(而且太可能过时,或者版本之间存在差异)无法在此列出——最好询问您当前的环境。

    最好不要依赖其他库来为您加载它们的依赖项,因为这些依赖项可能会改变。(尽管在这种情况下,很难注意到您缺少 require ,因为一切都能正常工作。)