2014-01-15 2 views
0

При попытке ответить на вопрос другого члена, я случайно сталкивался с этим странным поведением:#puts создал новый хеш?

puts :some_object => 'another_object' 

Удивительно, но выход заключается в следующем:

{:some_object=>"another_object"}

Что это новая чертовщина? Похоже, что я создал хеш с использованием #puts и без использования обычного синтаксиса фигурных скобок.

Я не могу проверить эту теорию, хотя, потому что это просто генерирует ошибку:

puts (:some_object => 'another_object').class 

# => syntax error, unexpected =>, expecting ')' 

Что здесь происходит?

Edit: Хорошо, благодаря объяснению bundacia, это теперь легко для меня, чтобы проверить и подтвердить, что это хэш (в то время как я не был уверен, как сделать это раньше):

def test(x) 
    puts x.class 
end 
test(:some_object => 'another_object') 

# => Hash 

Многие благодаря!

+1

Обычный синтаксис Ruby, который имеет некоторые методы удобства вокруг хэшей. –

ответ

3

Вы: :, проходящий хэш до puts. В ruby, если последний аргумент, который вы передаете функции, является хешем, фигурные скобки необязательны. Таким образом, ваш пример эквивалентен:

puts({:some_object => 'another_object'}) 
+0

Спасибо за это. Должен сказать, что я нахожу это странным, но с этим объяснением теперь легко подтвердить класс. – Kal

Смежные вопросы