makevoid
makevoid

Reputation: 3287

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}

Upvotes: 57

Views: 20278

Answers (4)

Stiig
Stiig

Reputation: 1294

As of Ruby 2.2, you also can use following syntax:

{a: 1, b: 2, 'c-c': 3, d: 4}

Upvotes: 13

Wayne Conrad
Wayne Conrad

Reputation: 107959

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'

Upvotes: 64

Nate
Nate

Reputation: 386

To use dashes with the new syntax:

<%= link_to "Link", link_path, {data: {something: 'value1', somethingelse: 'value2'}} %>

This will generate:

<a href="/link" data-something='value1' data-somethingelse='value2'>Link</a>

This might not exactly be your particular use case, but I found this post while trying to find an answer myself so I thought I'd share my findings.

Upvotes: 24

sl80
sl80

Reputation: 251

You can combine the old and new syntax:

{a: 1, b: 2, :'c-c' => 3, d: 4}

Upvotes: 25

Related Questions