Чтобы устранить недоразумение:
это заблуждение/разочарование, когда ключ строка изменяется, чтобы символ
Это WASN» t строка для начала. Это просто еще один синтаксис для создания символьных ключей. Рассмотрение:
:'foo-bar'.class # => Symbol
Идея состоит в том, что иногда символы могут быть похожими на нечто совершенно иное.
Например, указанные без кавычек будут означать «создать буквальный символ :foo
и от него, вычесть значение локального переменный/вызова метода результата bar
». Раньше не было никакого способа построить такие символы, кроме как использовать String#to_sym
. И вы должны согласиться, что это выглядит ужасно:
{'foo-bar'.to_sym => 42, :this_now_needs_rocket_notation => 'baz'}
Котировки вообще не означают создание строки, они означают берут как и/или определить границы для чего-то. Поэтому они, кстати, имеют большой смысл для строкового синтаксиса строки, но это не единственное их приложение.
«key: value» - это просто ярлык для ': key => value', поэтому в вашем примере фактически нет строкового ключа -' 'a: 123' становится': "a" => 123' (обратите внимание на ведущий ':') – Stefan
Может быть приятно, что если {"a": 123} использует HashWithIndifferentAccess под капотом, в отличие от хэша. – Joerg
@Joerg: вы можете отправить запрос на функцию :) –