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/