rubypry

pry inspect method not working


I have the following code from understanding computation book. The intention is to change the inspect behavior.

class Number < Struct.new(:value)
  def inspect
    "<<#{self}>>"
  end
  def to_s
    value.to_s
  end
end

It works as expected when I use irb:

irb(main):014:0> Number.new(1)
=> <<1>>

but it does not when I use pry:

[8] pry(main)> n = Number.new(1)
=> #<struct Number value=1>

The Pry is version 0.10.3 on Ruby 2.0.0. Why does it not work?


Solution

  • Pry doesn't just use inspect to display the return value. It calls a proc called print object that is defined in configuration. In lib/pry.rb, you can find that it is set to:

    class Pry
      # The default print
      DEFAULT_PRINT = proc do |output, value, _pry_|
        _pry_.pager.open do |pager|
          pager.print _pry_.config.output_prefix
          Pry::ColorPrinter.pp(value, pager, Pry::Terminal.width! - 1)
        end
      end
    end
    

    In order to use inspect as in irb, set it like this as instructed here:

    Pry.config.print = proc {|output, value| output.puts "=> #{value.inspect}"}
    

    Then you will get:

    pry(main)> n = Number.new(1)
    => <<1>>