Ruby: So erstellen Sie eine IRB-Druckstruktur für Arrays und Hashes

69

Wenn ich ein neues Array / einen neuen Hash in irb erstelle , druckt es ein schönes Format aus, um die Struktur zu zeigen, z.

["value1", "value2", "value3"]
{"key1" => "value1"}

... aber wenn ich versuche, meine Variablen mit auszudrucken, werden putssie reduziert:

value1
value2
value3
key1
value1

Ich nehme an, das putsist nicht der richtige Befehl für das, was ich will, aber was ist das? Ich möchte meine Variablen in irb im ersten Format anzeigen können , nicht im zweiten.

neezer
quelle

Antworten:

120

Sie können entweder die folgende inspectMethode verwenden:

a=["value1", "value2", "value3"]
puts a.inspect

Oder, noch besser, verwenden Sie die pp (hübsche Druck) lib:

require 'pp'
a=["value1", "value2", "value3"]
pp a
Dmondark
quelle
6
ppkauft Ihnen Einrückung, wenn das Objekt zu groß ist.
Taw
58

Sie können auch die yMethode verwenden, mit der Eingaben in Yaml konvertiert werden. Das erzeugt eine ziemlich schöne Ausgabe ...

>> data = { 'dog' => 'Flemeale', 'horse' => 'Gregoire', 'cow' => 'Fleante' }
=> {"cow"=>"Fleante", "horse"=>"Gregoire", "dog"=>"Flemeale"}
>> y data
--- 
cow: Fleante
horse: Gregoire
dog: Flemeale
Ethan
quelle
1
Schön, wusste es nicht (ich liebe YAML)
Yoann Le Touche
2
Für 1.9 und höher sollten Sie anstelle der yMethode verwenden YAML.dump. Per [ github.com/tenderlove/psych/issues/50] : yverschmutzter Kernel und per [ ruby-forum.com/topic/2332227] , Kernel.yist privat.
Aenw
14

Der hübsche Druck funktioniert gut, aber das Juwel Awesome_Print ist noch besser! Sie müssen, require awesome_printaber es behandelt verschachtelte Hashes und Arrays wunderschön und färbt sie im Terminal mit 'ap' anstelle von 'p', um die Ausgabe zu platzieren.

Sie können es auch in Ihr ~ / .irbrc aufnehmen, um dies als Standardmethode für die Anzeige von Objekten festzulegen:

require "awesome_print"
AwesomePrint.irb!
Chris
quelle
Ich mag diesen gut aussehenden Hashes!
Adam Marshall
6

Versuchen Sie es mit .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 sie auch mit der p () -Methode drucken:

>> p a
{"key1"=>"value1"}
Gdeglin
quelle
3

Mein persönliches Werkzeug der Wahl ist 'Pretty Print' und die ppMethode

require 'pp' # <- 'Pretty Print' Included in ruby standard library
pp({ :hello => :world, :this => ['is', 'an', 'array'] })
=> {:hello=>:world, :this=>["is", "an", "array"]} 
jacobsimeon
quelle