5 ответов:
Да, есть разница. Они являются юридическим:
h = { :$in => array } h = { :'a.b' => 'c' } h[:s] = 42но это не так:
h = { $in: array } h = { 'a.b': 'c' } # but this is okay in Ruby2.2+ h[s:] = 42вы также можете использовать что-нибудь в качестве ключа с
=>так что вы можете сделать это:h = { C.new => 11 } h = { 23 => 'pancakes house?' }но вы не можете этого сделать:
h = { C.new: 11 } h = { 23: 'pancakes house?' }стиль JavaScript (
key: value) полезно только в том случае, если все ваши хэш-ключи являются "простыми" символами (более или менее то, что соответствует/\A[a-z_]\w*\z/i, насколько я понимаю, парсер использует свой шаблон этикетки для этих ключи.)The
:$inсимволы стиля показывают справедливый бит при использовании MongoDB, поэтому вы в конечном итоге смешиваете стили хэша, если используете MongoDB. И, если вы когда-либо работали с определенными ключами хэшей (h[:k]), а не просто все хэши (h = { ... }), вам все равно придется использовать стиль двоеточия для символов; вы также должны будете использовать стиль двоеточия для символов, которые вы используете за пределами хэшей. Я предпочитаю быть последовательным, поэтому я не беспокоюсь о стиле JavaScript на все.некоторые проблемы с JavaScript-стилем были исправлены в Ruby 2.2. Теперь вы можете использовать кавычки, если у вас есть символы, которые не являются допустимыми метками, например:
h = { 'where is': 'pancakes house?', '$set': { a: 11 } }но вам все еще нужен hashrocket, если ваши ключи не являются символами.
key: "value"Это удобная функция Ruby 1.9; пока вы знаете, что ваша среда будет поддерживать ее, я не вижу причин не использовать ее. Это просто намного легче напечатать двоеточие, чем ракету, и я думаю, что это выглядит намного чище. Что касается того, что есть драгоценный камень, чтобы сделать преобразование, вероятно, нет, но это кажется идеальным опытом обучения для вас, если вы еще не знаете манипуляции с файлами и регулярные выражения.
на
key: valueназначения в стиле JSON являются частью нового синтаксиса хэша Ruby 1.9, поэтому имейте в виду, что этот синтаксис не будет работать со старыми версиями Ruby. Кроме того, ключи будут символами. Если вы можете жить с этими двумя ограничениями, новые хэши работают так же, как и старые хэши; нет никакой причины (кроме стиля, возможно), чтобы преобразовать их.
рубиновые хэш-ключи, назначенные хэш-ракетами, могут облегчить строки для пар ключ-значение (Эл.г.
's' => x) в то время как назначение ключа через символы (напримерkey: "value"или:key => "value")не может быть назначена со строками. хотя хэш-ракеты обеспечивают свободу и функциональность для хэш-таблиц,специально позволяя строки в качестве ключей, производительность приложения может быть ниже, чем если бы хэш-таблицы были построены с символами в виде хэш-ключи. Следующие ресурсы могут быть в состоянии прояснить любые различия между хэшроками и символами:
делаешь
:key => valueЭто то же самое, что делатьkey: value, и это действительно просто удобство. Я не видел других языков, которые используют=>, но другие, как Javascript использоватьkey: valueв их хэш-эквивалентных типах данных.что касается драгоценного камня, чтобы преобразовать то, как вы написали свои хэши, я бы просто придерживался того, как вы это делаете для своего текущего проекта.
*обратите внимание, что при использовании
key: valueключ будет символом, и для доступа к значению, хранящемуся в этом ключе в afooхэш все равно будетfoo[:key].
Comments