Ruby: Wie IRB Druckstruktur für Arrays und Hashes machen
Frage
Wenn ich eine neue Array / hash in irb , druckt es ein schönes Format, um die Struktur zu zeigen, ab.
["value1", "value2", "value3"]
{"key1" => "value1"}
... aber wenn ich versuche, mit puts
heraus meine Variablen zu drucken, erhalte ich sie zusammenbrach:
value1
value2
value3
key1
value1
Ich nehme an, dass puts
nicht der richtige Befehl ist für das, was ich will, aber was ist? Ich möchte in der Lage sein, meine Variablen in irb im ersten Format, nicht die zweite Ansicht.
Lösung
Sie können entweder die inspect
Methode verwenden:
a=["value1", "value2", "value3"]
puts a.inspect
Oder, noch besser, verwenden Sie die pp (ziemlich print) lib:
require 'pp'
a=["value1", "value2", "value3"]
pp a
Andere Tipps
Eine andere Sache, die Sie tun können, ist die y
Methode verwenden, die Eingabe in Yaml umwandelt. Das erzeugt sehr schön Ausgang ...
>> data = { 'dog' => 'Flemeale', 'horse' => 'Gregoire', 'cow' => 'Fleante' }
=> {"cow"=>"Fleante", "horse"=>"Gregoire", "dog"=>"Flemeale"}
>> y data
---
cow: Fleante
horse: Gregoire
dog: Flemeale
Der hübsche Druck funktioniert gut, aber das Awesome_Print Juwel ist noch besser! Sie müssen require awesome_print
aber es Griffe verschachtelten Hashes und Arrays schön und Farben, um sich im Terminal ‚ap‘ anstelle von ‚p‘ mit bis setzt die Ausgabe.
Sie können auch sie in Ihrem ~ / .irbrc dies als Standard-Methode haben Objekte für die Anzeige:
require "awesome_print"
AwesomePrint.irb!
Versuchen .inspect
>> a = ["value1", "value2", "value3"]
=> ["value1", "value2", "value3"]
>> a.inspect
=> "[\"value1\", \"value2\", \"value3\"]"
>> a = {"key1" => "value1"}
=> {"key1"=>"value1"}
>> a.inspect
=> "{\"key1\"=>\"value1\"}"
Sie können auch den p () -Methode verwenden, um sie zu drucken:
>> p a
{"key1"=>"value1"}
Mein persönliches Werkzeug der Wahl hierfür ist ‚Pretty Print‘ und die pp
Methode
require 'pp' # <- 'Pretty Print' Included in ruby standard library
pp({ :hello => :world, :this => ['is', 'an', 'array'] })
=> {:hello=>:world, :this=>["is", "an", "array"]}