Почему я не могу использовать целое число в качестве ключа, используя новый синтаксис хеша 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 и является альтернативой обычному использованию:
:symbol => 5
а не как общий ключ. Подробнее о символах здесь. И другие написали об этом в отношении принципа наименьшего удивления (см. здесь).