Почему я не могу использовать целое число в качестве ключа, используя новый синтаксис хэша Ruby 1.9.2?
Новый синтаксис хэша в Ruby 1.9.2 означает, что я могу сделать следующее:
my_hash = {a: 1, b: 2, c: 3}
... что эквивалентно:
my_hash = {:a => 1, :b => 2, :c => 3}
Итак, используя старый синтаксис, можно сделать следующее (Первый ключ-целое число):
my_hash = {1 => 1, :b => 2, :c => 3}
И я обнаружил, что даже можно смешивать новый и старый синтаксис следующим образом:
my_hash = {1 => 1, b: 2, c: 3}
Таким образом, если мы будем ссылаться на "принцип наименьшего удивления", можно было бы ожидать, что следующее будет законным:
my_hash = {1: 1, b: 2, c: 3}
... но это не так. Он создает синтаксическая ошибка:
SyntaxError: (irb):40: syntax error, unexpected '='
my_hash = = {1: 1, b: 2, c: 3}
Может ли кто-нибудь объяснить, является ли это ограничением синтаксического анализатора, или есть очень веские причины, почему это невозможно или разрешено?1 ответ:
Этот синтаксис используется только для Ruby 'symbols' и является альтернативой обычному использованию:
:symbol => 5
, а не как общий ключ. Подробнее о символах здесь. и другие писали об этом в отношении принципа наименьшего удивления (см. здесь).