Неужели Hash Rocket устарела?

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

Ответ 1

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

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

Вы можете, как правило, обходить все вышеизложенное очевидным образом:

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

но это просто уродливое и ненужное.

Ракета никуда не денется, без разрушения рубиновых хэшей.