Короче говоря, я писал метод, который включал аргумент options, который будет делать определенные вещи, если значение для ключа :if оценивается как true. Когда я пытаюсь ввести хэш в IRB, используя новый синтаксис, я получаю синтаксическую ошибку в IRB, приглашение остается открытым:
1.9.3p374 :010 > {if: true}
1.9.3p374 :011?>
Используя старый синтаксис, работает просто отлично:
1.9.3p374 :011 > {:if => true}
=> {:if=>true}
Все ключевые слова, с которых начинается оператор, ведут себя одинаково. Например. def
, do
, module
, case
Другие зарезервированные слова, которые встречаются в середине и class
, прекрасно работают: else
, end
.
Мой вопрос: это ожидаемое поведение, ошибка или ограничение?
irb
немного хрупок и имеет значительное повреждение мозга, вы, вероятно, видите некоторые из них. - person mu is too short   schedule 20.02.2013echo 'puts {if: true}.inspect' > test.rb; ruby test.rb
возвращает:test.rb:1: syntax error, unexpected ':'
Каким образомirb
хрупок? - person nzifnab   schedule 20.02.2013end
, и если он неправильно интерпретирует оператор управления (как здесь), возникают дополнительные уникальные проблемы. - person coreyward   schedule 20.02.2013h = { if: 'b' };puts h.inspect
. - person mu is too short   schedule 20.02.2013