Да, есть разница.Это допустимо:
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
) полезен только в том случае, если все ваши ключи Hash являются «простыми» символами (более или менее совпадающими)./\A[a-z_]\w*\z/i
, AFAIK синтаксический анализатор использует свой шаблон метки для этих ключей).
Символы стиля :$in
показывают значительный бит при использовании MongoDB, поэтому вы в конечном итоге будете смешивать стили хэша, если будете использовать MongoDB.И, если вы когда-либо работаете с определенными ключами хэшей (h[:k]
), а не только с целыми хешами (h = { ... }
), вам все равно придется использовать стиль двоеточия для символов;вам также придется использовать стиль ведущей двоеточия для символов, которые вы используете вне хэшей.Я предпочитаю быть последовательным, поэтому вообще не беспокоюсь о стиле JavaScript.
Некоторые проблемы со стилем JavaScript были исправлены в Ruby 2.2.Теперь вы можете использовать кавычки, если у вас есть символы, которые не являются допустимыми метками, например:
h = { 'where is': 'pancakes house?', '$set': { a: 11 } }
Но вам все еще нужен хеш -рокет, если ваши ключи не являются символами.