Почему я не могу использовать целое число в качестве ключа, используя новый синтаксис хэша 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 14

1 ответ:

Этот синтаксис используется только для Ruby 'symbols' и является альтернативой обычному использованию:

:symbol => 5

, а не как общий ключ. Подробнее о символах здесь. и другие писали об этом в отношении принципа наименьшего удивления (см. здесь).