Hash Rocket устарел?

99

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

Mahemoff
источник
Я думаю, этот парень использует Ruby только с Rails.
Никлас Б.
Да здравствует ракета
HashRocketSyntax
Ракета по-прежнему сильна 🚀
mahemoff

Ответы:

132

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

  1. Вы должны использовать ракету для символов, которые не являются допустимыми ярлыками: :$set => xдействительно, но $set: xне является. В Ruby 2.2+ эту проблему можно обойти с помощью кавычек: '$set': xwill do The Right Thing.

  2. Вы должны использовать ракету, если вы используете в своих хэшах ключи, которые не являются символами, например строки, целые числа или константы. Например, 's' => xдействительно, но 's': xэто совсем другое.

Конечно, вы можете обойти все вышесказанное очевидным образом:

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

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

Ракета никуда не денется, не повредив Ruby Hashes.

mu слишком короткий
источник
6
s / чрезмерно драматичный и глупый / драматический и пропагандистский с красноречивым почтением /. Остальные ваши очки остаются в силе.
dbenhur
17
Вы должны задаться вопросом, не усложнит ли наш код использование нового синтаксиса, когда вам все еще нужно полагаться на старый синтаксис для определенных сценариев.
Дэйв Рэпин
4
@DaveRapin: Вот почему я не беспокоюсь о синтаксисе без ракет. Я изрядно работаю с MongoDB, и я часто использую не-символы в качестве хеш-ключей (не говоря уже о том, что h[:s]я делаю), поэтому синтаксис стиля JavaScript для меня просто бессмысленное усложнение. Мне кажется, что это плохо продуманная идея, и теперь мы навсегда застряли в ней и связанной с ней неразберихе.
mu слишком короткое
8
@DaveRapin Рассмотрим a = [0,1,4,9]VS. a = Array.new(4){ |i| i**2 }. Зачем использовать первое, если иногда нужно использовать второе? Ответ: потому что так удобнее. TIMTOWTDI усложняет язык, но это компромисс. Lua действительно элегантен по своей сути и, следовательно, его легко изучить, но на самом деле код его раздражает. Ruby имеет множество особых случаев и настраиваемых функций, которые усложняют изучение, но при этом приятно программировать. Я, например, приветствую более простая в использовании и понятная нотация Hash-with-symbol-keys для общего случая.
Phrogz
7
Хотя печатать это не так весело, я определенно предпочитаю ракету для хеширования. Зачем? потому что это означает, что каждый раз, когда я использую символ для ключа, я могу искать его в любом месте своего проекта, ища строку, начинающуюся с двоеточия. Для меня, отсутствие согласованности между реальными символами используется для обозначения ключа my_hash = {a:1}и myhash[:a] = 1, по крайней мере, весьма раздражает. Я уверен, что я не единственный, кто так думает.
Huliax