Search code examples
rubysyntaxhashruby-1.9hashrocket

Is Hash Rocket deprecated?


The well-cited RIP Hash rocket post would seem to imply the Hash Rocket syntax (:foo => "bar") is deprecated in favor of the new-to-Ruby JSON-style hash (foo: "bar"), but I can't find any definitive reference stating the Hash Rocket form is actually deprecated/unadvised as of Ruby 1.9.


Solution

  • The author of that blog post is being overly dramatic and foolish, the => is still quite necessary. In particular:

    1. You must use the rocket for symbols that are not valid labels: :$set => x is valid but $set: x is not. In Ruby 2.2+ you can get around this problem with quotes: '$set': x will do The Right Thing.

    2. You must use the rocket if you use keys in your Hashes that aren't symbols, such as strings, integers or constants. For example, 's' => x is valid but 's': x is something completely different.

    You can kludge around the above in the obvious manner of course:

    h = { }
    h[:'where.is'] = 'pancakes house?'
    # etc.
    

    but that's just ugly and unnecessary.

    The rocket isn't going anywhere without crippling Ruby's Hashes.