evolution evolution - 7 months ago 22
Ruby Question

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?

Answer

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>>
Comments