Ruby 1.9 hash with a dash in a key

19,079

Solution 1

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

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

Solution 2

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'

Solution 3

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.

Solution 4

You can combine the old and new syntax:

{a: 1, b: 2, :'c-c' => 3, d: 4}
Share:
19,079
makevoid
Author by

makevoid

Hi! I develop Ethereum and Bitcoin apps: My Ethereum projects (proof-of-concept phase): http://insureth.mkvd.net ( https://github.com/bertani/insurETH ) http://solether.mkvd.net Ethereum micro-framework BAPP: https://github.com/appliedblockchain/bapp Ethereum testchain lite mining script: https://gist.github.com/makevoid/701d516182e38658f5d0 More: github: @makevoid (Follow for new projects &amp; scripts!) twitter: @makevoid My bitcoin projects: http://bitnfc.org http://paperbank.it

Updated on June 06, 2022

Comments

  • makevoid
    makevoid about 2 years

    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}