makevoid makevoid - 1 month ago 9
Ruby Question

Ruby 1.9 hash with a dash in a key

In ruby 1.9 is there a way to define this hash with the new syntax?

irb> { a: 2 }
=> {:a=>2}

irb> { a-b: 2 }
SyntaxError: (irb):5: syntax error, unexpected tLABEL
{ a-b: 2 }
^


with the old one, it's working:

irb> { :"a-b" => 2 }
=> {:"a-b"=>2}

Answer

There are some legitimate symbols that cannot be used with the new syntax. I cannot find a reference, but it appears that a symbol name matching /^[a-zA-Z_][a-zA-Z_0-9]*[!?]?$/ is allowed with the new syntax. The last character may be the special character "!" or "?".

For any symbol that does not meet these restrictions, you have to use the Ruby 1.8 syntax, :'my-symbol-name'