2012-04-04 6 views
88

Хорошо обозначенный RIP Hash rocket post, казалось бы, означает, что синтаксис Hash Rocket (:foo => "bar") устарел в пользу хэша стиля New-to-Ruby JSON (foo: "bar"), но я не могу найти окончательную ссылку, в которой указывается Hash Rocket форма на самом деле устарела/не одобрена с Ruby 1.9.Неужели Hash Rocket устарела?

+0

Я думаю, что этот парень использует Ruby только Rails. –

ответ

119

Автор этого блога поста чрезмерно драматичным и глупы, то => является stillquitenecessary. В частности:

  1. Вы должны использовать ракету для символов, которые требуют кавычек: :'where.is' => x допустима, но нет. Ruby 2.2 исправил эту проблему, поэтому вы можете сказать в Ruby 2.2+.
  2. Вы должны использовать ракеты для символов, которые не являются допустимыми ярлыками: :$set => x действителен, но $set: x нет. В Ruby 2.2+ вы можете обойти эту проблему с помощью котировок: '$set': x сделает «Правильную вещь».
  3. Вы должны использовать ракеты, если вы используете ключи в своих хэшах, которые не являются символами: 's' => x действителен, но 's': x - это нечто совершенно иное.

Вы можете клудж вокруг выше очевидным образом конечно:

h = { } 
h[:'where.is'] = 'pancakes house?' 
# etc. 

но это просто некрасиво и ненужно.

Ракета никуда не денется, без разрушения хрящей Руби.

+4

s/чрезмерно драматический и глупый/драматический и пропагандистский с красноречивым почтением /. Остальные ваши очки стоят. – dbenhur

+0

Я согласен, это, безусловно, одна из самых красноречивых должностей по обновлению языка. Хотя немного вводит в заблуждение: D. – mahemoff

+13

Вы должны задаться вопросом, будет ли использование нового синтаксиса, когда вам все еще нужно полагаться на старый синтаксис для определенных сценариев, просто усложнит наш код. –