2012-08-08 4 views
5

Это довольно странно, но я не знаю, что настроить или где настроить. Я пытаюсь напечатать простой хэш-значение, как показано ниже:Почему мои хэши печатаются как строки?

#!/usr/bin/ruby 

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

puts names 

Я ожидаю, что выход будет

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

в то время как я получаю

1Jane2Thomas 

Любые идеи?

+2

Кажется, вы используете Ruby 1.8. В Ruby 1.9 вы * делаете * получаете ожидаемый результат. Ответ Ольдергода решает вашу проблему в 1.8. – Mischa

+0

Voila, моя версия рубина - 1.8.7. Да, действительно, ответ работает отлично. – PCoder

ответ

4

Вы должны использовать осмотр.

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

или просто 'p names' – tokland

3

ставит метод вызывает to_s на его аргумента (ов) и выводит результат. р метод, однако вызывает инспектировать на его аргумент (ы) и выводит результат:

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

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

Таким образом, чтобы иметь хороший Hash распечатку, либо использовать

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

или

p {1=>"Jane", 2=>"Thomas"} 
Смежные вопросы