2012-08-08 11 views
5

È piuttosto strano, ma non so cosa configurare o dove configurare. Sto provando a stampare un semplice valore di hash, come di seguito:Perché i miei hash sono stampati come stringhe?

#!/usr/bin/ruby 

names = Hash.new 
names[1] = "Jane" 
names[2] = "Thomas" 

puts names 

mi aspetto l'uscita di essere

{1=>"Jane", 2=>"Thomas"} 

mentre ricevo

1Jane2Thomas 

Tutte le idee?

+2

Sembra che si stia utilizzando Ruby 1.8. In Ruby 1.9 hai * ottenuto * l'output che ti aspetti. La risposta di Oldergod risolve il tuo problema in 1.8. – Mischa

+0

Voila, la mia versione di ruby ​​è 1.8.7. Sì, in effetti la risposta funziona bene. – PCoder

risposta

4

È necessario utilizzare ispezionare.

puts names.inspect 
#=> {1=>"Jane", 2=>"Thomas"} 
+1

o semplicemente "nomi p" – tokland

3

Il mette metodo chiama to_s sul suo argomento (s) e stampa il risultato. Il metodo p tuttavia chiama ispezionare sul suo argomento (s) e stampa il risultato:

{1=>"Jane", 2=>"Thomas"}.to_s 
#=> '1Jane2Thomas' 

{1=>"Jane", 2=>"Thomas"}.inspect 
#=> '{1=>"Jane", 2=>"Thomas"}' 

Quindi, per avere una bella stampa Hash, utilizzare

puts {1=>"Jane", 2=>"Thomas"}.inspect 

o

p {1=>"Jane", 2=>"Thomas"} 
Problemi correlati