Есть ли разница между `: key => «Значение» `и` ключ: “значение” `хэш-нотации?

Есть ли разница между :key => "value" (hashrocket) и key: "value" (Ruby 1.9) нотации?

Если нет, то я бы хотел использовать нотацию key: "value". Есть ли драгоценный камень, который помогает мне перейти из :x => в x: нотации?

113 голосов | спросил AdamNYC 30 FriEurope/Moscow2011-12-30T05:09:14+04:00Europe/Moscow12bEurope/MoscowFri, 30 Dec 2011 05:09:14 +0400 2011, 05:09:14

3 ответа


0

Да, есть разница. Это законно:

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, AFAIK синтаксический анализатор использует свой шаблон метки для этих ключей).

Символы стиля :$in при использовании MongoDB проявляют значительный интерес, поэтому в итоге вы будете смешивать стили хэша, если будете использовать MongoDB. И, если вы когда-либо работаете с определенными ключами хэшей (h[:k]), а не только с целыми хешами (h = { ... }), вам все равно придется использовать стиль двоеточия для символов; вам также придется использовать стиль начальных двоеточий для символов, которые вы используете вне хэшей. Я предпочитаю быть последовательным, чтобы вообще не беспокоиться о стиле JavaScript.

Некоторые проблемы со стилем JavaScript были исправлены в Ruby 2.2. Теперь вы можете использовать кавычки, если у вас есть символы, которые не являются допустимыми метками, например:

h = { 'where is': 'pancakes house?', '$set': { a: 11 } }

Но вам все еще нужен хеш-код, если ваши ключи не являются символами.

ответил mu is too short 30 FriEurope/Moscow2011-12-30T05:30:17+04:00Europe/Moscow12bEurope/MoscowFri, 30 Dec 2011 05:30:17 +0400 2011, 05:30:17
0

key: value Назначения в стиле JSON являются частью нового хэш-синтаксиса Ruby 1.9, поэтому имейте в виду, что этот синтаксис работать со старыми версиями Ruby. Кроме того, ключи будут символами. Если вы можете жить с этими двумя ограничениями, новые хеши работают так же, как старые хеши; нет никакой причины (кроме стиля, возможно) конвертировать их.

ответил sczizzo 30 FriEurope/Moscow2011-12-30T05:12:42+04:00Europe/Moscow12bEurope/MoscowFri, 30 Dec 2011 05:12:42 +0400 2011, 05:12:42
0

Рубиновые хеш-ключи, назначенные hash-rockets, могут упростить строки для пар ключ-значение ( например, . 's' => x) тогда как назначение клавиш с помощью символов ( например key: "value" или :key => "value") нельзя назначать со строками. Хотя хеш-ракеты предоставляют свободу и функциональность для хеш-таблиц, особенно разрешение строк в качестве ключей , производительность приложения может быть ниже, чем если бы хэш-таблицы создавались с символами в качестве хэш-ключей. Следующие ресурсы могут прояснить любые различия между хеш-кодами и символами:

ответил alexanderjsingleton 20 FebruaryEurope/MoscowbSat, 20 Feb 2016 21:58:42 +0300000000pmSat, 20 Feb 2016 21:58:42 +030016 2016, 21:58:42

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132