Почему я не могу использовать целое число в качестве ключа, используя новый синтаксис хэша Ruby 1.9.2? - PullRequest
14 голосов
/ 26 ноября 2010

Новый синтаксис хэша в 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 голосов
/ 26 ноября 2010

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

:symbol => 5

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...