【问题标题】:Ruby Configure IRB to Pretty_Inspect by DefaultRuby 默认将 IRB 配置为 Pretty_Inspect
【发布时间】:2026-01-07 01:30:01
【问题描述】:

我对 ruby​​ 相当陌生,并且正在配置 IRB。我喜欢漂亮的打印(需要'pp'),但总是输入 pp 让它漂亮地打印它似乎很麻烦。我想做的是在默认情况下让它打印得很漂亮,所以如果我有一个 var ,比如'myvar',然后输入 myvar,它会自动调用 pretty_inspect 而不是常规的检查。我从哪里开始?理想情况下,我可以向我的 .irbrc 文件中添加一个自动调用的方法。有什么想法吗?

谢谢!

【问题讨论】:

    标签: ruby default pretty-print irb inspect


    【解决方案1】:

    irb 中默认的漂亮打印对象正是 hirb 所做的。 Theseposts 解释 hirb 如何将几乎任何东西转换成 ascii 表。虽然 hirb 是按类配置的,但您可以将所有对象显示为表格:

    # put this in ~/.irbrc
    require 'rubygems'
    require 'hirb'
    Hirb.enable :output=>{'Object'=>{:class=>:auto_table, :ancestor=>true}}
    
    # in irb
    >> %w{three blind mice}
    +-------+
    | value |
    +-------+
    | three |
    | blind |
    | mice  |
    +-------+
    3 rows in set
    
    >> 1..5
    +-------+
    | value |
    +-------+
    | 1     |
    | 2     |
    | 3     |
    | 4     |
    | 5     |
    +-------+
    5 rows in set
    
    >> {:a=>1, :b=>2}
    +---+---+
    | 0 | 1 |
    +---+---+
    | a | 1 |
    | b | 2 |
    +---+---+
    2 rows in set
    

    This related overflow solution 也有一个 hirb 的例子。

    【讨论】:

      【解决方案2】:

      当 irb 启动时,它会从您的 $HOME 目录中读取 .irbrc。如果您编辑(或创建)该文件并添加

      require 'pp'
      

      每次启动 irb 时都会加载它。

      也可以查看 this addition 到 pretty_print 方法列表。把它扔到你的 .irbrc 中,你可以这样做:

      >> 5.pm
                            %(arg1)         Fixnum
                            &(arg1)         Fixnum
                            *(arg1)         Fixnum
                           **(arg1)         Fixnum
                            +(arg1)         Fixnum
                           +@()             Fixnum(Numeric)
                            -(arg1)         Fixnum
                           -@()             Fixnum
                            /(arg1)         Fixnum
                           <<(arg1)         Fixnum
                           >>(arg1)         Fixnum
                           [](arg1)         Fixnum
                            ^(arg1)         Fixnum
                          abs()             Fixnum
                          ago(arg1, ...)    Fixnum(ActiveSupport::CoreExtensions::Numeric::Time)
                     between?(arg1, arg2)   Fixnum(Comparable)
                         byte()             Fixnum(ActiveSupport::CoreExtensions::Numeric::Bytes)
                        bytes()             Fixnum(ActiveSupport::CoreExtensions::Numeric::Bytes
      

      【讨论】: