2009-03-31 6 views
58

Quando creo un nuovo array/hash in irb, stampa un bel formato per mostrare la struttura, es.Ruby: Come rendere la struttura di stampa IRB per Array e Hash

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

... ma quando provo a stampare le mie variabili utilizzando puts, ottengo loro sono crollati:

value1 
value2 
value3 
key1 
value1 

Mi sembra di capire che non è puts il comando giusto per quello che voglio, ma ciò che è? Voglio essere in grado di visualizzare le mie variabili in irb nel primo formato, non nel secondo.

risposta

101

È possibile utilizzare il metodo inspect:

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

O, meglio ancora, utilizzare il PP (piuttosto di stampa) lib:

require 'pp' 
a=["value1", "value2", "value3"] 
pp a 
+1

Perfetto. Grazie! – neezer

+1

cosa ti compra la pp che p non ti ha già dato? – rampion

+6

'pp' compra indentazione se l'oggetto è troppo grande. – taw

4

Prova .inspect

>> a = ["value1", "value2", "value3"] 
=> ["value1", "value2", "value3"] 
>> a.inspect 
=> "[\"value1\", \"value2\", \"value3\"]" 
>> a = {"key1" => "value1"} 
=> {"key1"=>"value1"} 
>> a.inspect 
=> "{\"key1\"=>\"value1\"}" 

È inoltre possibile utilizzare il metodo p() per stamparli:

>> p a 
{"key1"=>"value1"} 
47

Un'altra cosa che puoi fare è usare il metodo y che converte l'input in Yaml. Che produce output abbastanza piacevole ...

>> data = { 'dog' => 'Flemeale', 'horse' => 'Gregoire', 'cow' => 'Fleante' } 
=> {"cow"=>"Fleante", "horse"=>"Gregoire", "dog"=>"Flemeale"} 
>> y data 
--- 
cow: Fleante 
horse: Gregoire 
dog: Flemeale 
+0

Bello, non lo sapevo (adoro YAML) –

+11

Ovviamente, devi 'richiedere yaml' per ottenere il metodo. – Chuck

+0

buon punto! Grazie! –

3

mio strumento personale di scelta per questo è 'Stampa Pretty' e il metodo pp

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

doh! Ho appena realizzato che la risposta accettata cita 'pp' – jacobsimeon

+2

+1 per esempio di output :) – Madbreaks

12

La graziosa stampa funziona bene, ma la gemma Awesome_Print è ancora meglio! Dovrai utilizzare lo require awesome_print ma gestisce splendidamente gli hash e gli array nidificati e li colora nel terminale usando "ap" invece di "p" per posizionare l'output.

È possibile anche includere nel vostro ~/.irbrc ad avere questo come il metodo predefinito per la visualizzazione di oggetti:

require "awesome_print" 
AwesomePrint.irb! 
+0

Mi piace questo, bello Hash! –