Hier ist ein einfacher Graph Knoten:Wie kann ich den Anzeigewert der PRY/IRB-Konsole für ein Ruby-Objekt ändern?
Node = Struct.new(:value, :children) do
def initialize(value, children=[]); super; end
end
Häufig ich dies in einer pry
oder irb
Konsole zu suchen. Das Problem ist, wenn ich die Grafik verdrahten und schauen an einem Knoten, ich Ausgabe wie folgt erhalten:
[1] pry(main)> node
=> #<struct Node
value=13,
children=
[#<struct Node
value=23,
children=
[#<struct Node:...>,
#<struct Node
value=19,
children=[#<struct Node:...>, #<struct Node value=10, children=[#<struct Node:...>]>]>]>,
#<struct Node value=28, children=[#<struct Node:...>]>,
#<struct Node value=2, children=[#<struct Node:...>]>,
#<struct Node value=14, children=[#<struct Node:...>]>]>
usw.
Dies wird schnell aus der Hand und schwer zu lesen. Ich kann einen lesbare to_s
auf Knoten definieren:
def to_s; "<#{value} #{children.collect(&:value)}>"; end
Aber ich brauche noch puts node
zu nennen, dies zu sehen:
[1] pry(main)> puts node
<13 [23, 28, 2, 14]>
=> nil
Gerade node
in der Konsole eingeben, gibt mir die ursprüngliche ausführliche Ausgabe (in beide pry
und irb
). Es ist ärgerlich, puts
jedes Mal einzugeben, wenn ich meine kompaktere Darstellung von node
im Debugger betrachten möchte.
Gibt es eine Methode, die ich definieren kann, um den Konsolenanzeigewert eines Objekts zu überschreiben? (Ich dachte, inspect
zwingende würde dies tun, aber es funktioniert nicht.)
Das Definieren von 'inspect' hat keine Auswirkungen auf das, was in der Konsole gedruckt wird (außer ich benutze' puts node', was ich zu vermeiden versuche). Ich habe 'awesome_print' installiert, aber es ist nicht in das fragliche Skript geladen, also wäre ich überrascht, wenn das das Problem verursacht. – Sasgorilla
'awesome_print' wird von' pry' geladen und es monkeypatches 'inspect' an allen Objekten. – mudasobwa
Interessant. 'irb' macht dasselbe? Ich bekomme dort die gleichen Ergebnisse. Ich möchte '' awesome_print' 'nicht wirklich deinstallieren - irgendwelche Vorschläge, wie man damit umgeht? – Sasgorilla