2016-04-16 15 views
1

Ich habe den folgenden Code von verstehen Berechnung Buch. Die Absicht ist, das inspect Verhalten zu ändern.Pry inspect Methode funktioniert nicht

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

Es funktioniert wie erwartet, wenn ich irb verwenden:

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

aber es funktioniert nicht, wenn ich pry verwenden:

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

Die Pry ist Version 0.10.3 zum Ruby 2.0. 0. Warum funktioniert es nicht?

Antwort

3

Pry verwendet nicht nur inspect, um den Rückgabewert anzuzeigen. Es ruft einen Prozess namens Druckobjekt, die in der Konfiguration definiert ist. In lib/pry.rb, können Sie feststellen, dass es eingestellt ist:

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 

Um inspect wie in irb zu verwenden, es so eingestellt, wie here instruiert:

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

Dann erhalten Sie:

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

funktioniert perfekt - danke! – evolution

+1

Es scheint eine Schande zu sein, das Druckverhalten für alle Objekte zu modifizieren (und Pry's Pretty-Printing zu verlieren), nur um das gewünschte Verhalten für eine Klasse zu erhalten. Würden Sie die Klasse nicht zu "Pry.config.prompt_safe_objects" hinzufügen, wie in der Dokumentation, die Sie verlinkt haben, ohne die unglücklichen Nebenwirkungen? –