From: shugo@... Date: 2015-10-22T11:43:23+00:00 Subject: [ruby-core:71152] [Ruby trunk - Bug #11604] [Feedback] Ruby's interpreting hash symbol keys as parts of Ruby syntax Issue #11604 has been updated by Shugo Maeda. Status changed from Open to Feedback Maciej Mensfeld wrote: > Cannot initialize hashes with some Ruby reserved keywords like: while, until, if, unless, do. Can with other like class, end, elsif, super. Don't really get why These syntax errors are not caused by key names, but by the use of { just after the method names. The following code also causes a syntax error without the new style syntax of hash literals: print { :while => 1 } In this case, { is not interpreted as the beginning of a hash literal, but the beginning of a block, and thus a syntax error occurs. ---------------------------------------- Bug #11604: Ruby's interpreting hash symbol keys as parts of Ruby syntax https://bugs.ruby-lang.org/issues/11604#change-54524 * Author: Maciej Mensfeld * Status: Feedback * Priority: Normal * Assignee: Yukihiro Matsumoto * ruby -v: ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux] * Backport: ---------------------------------------- Cannot initialize hashes with some Ruby reserved keywords like: while, until, if, unless, do. Can with other like class, end, elsif, super. Don't really get why ~~~ { while: 1 } # Will fail # error.rb:3: syntax error, unexpected ':' # print { while: 1 } ~~~ However when assigned, works perfectly ~~~ hash = { while: 1 } ~~~ But when used as a method argument - fails ~~~ run(for: 1) run { for: 1 } ~~~ Works with old syntax ~~~ { :if => 1 } ~~~ And with new but with quotation marks ~~~ { 'if': 1 } ~~~ Example file included. Please just execute like this: ~~~ ruby error.rb ~~~ ---Files-------------------------------- error.rb (278 Bytes) -- https://bugs.ruby-lang.org/