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.

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

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

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!

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"}

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"]} 
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.