2016-04-16 5 views
1

私はの理解のコードから次のコードを持っています。意図は、inspectの動作を変更することです。pry inspectメソッドが動作しない

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

私はirbを使用すると、期待どおりに動作します:

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

が、私は pryを使用する場合、それはしていません:

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

詮索はルビー2.0にバージョン0.10.3です。 0。なぜそれは機能しませんか?

答えて

3

Pryは戻り値を表示するのにinspectを使用するだけではありません。設定で定義されている印刷オブジェクトと呼ばれるプロックを呼び出します。 lib/pry.rbでは、あなたはそれがに設定されていることを見つけることができます:

irbのよう inspectを使用し、このようにそれを設定するために
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 

here指示通り:

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

はその後あなたが得る:

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

- ありがとう! – evolution

+1

1つのクラスに必要な動作を得るために、すべてのオブジェクトの印刷動作を変更して(そしてPryのきれいな印刷をすべて失うのは)残念です。 'Pry.config.prompt_safe_objects'にクラスを追加しないで、リンクしたドキュメントごとに、残念な副作用なしに同じことを達成できますか? –

関連する問題