哈希火箭已被弃用?

引用良好的RIP Hash火箭文章似乎暗示了Hash Rocket语法( :foo => "bar" )已被弃用,以支持新到Ruby JSON风格的散列( foo: "bar" ),但是我找不到任何明确的引用,说明从Ruby 1.9开始,Hash Rocket表单实际上已被弃用/未被使用。

那篇博客的作者过于戏剧性和愚蠢,但仍然是非常 必要的 。 尤其是:

  1. 您必须使用火箭符号,需要引用:: :'where.is' => x是有效的,但'where.is': x不是。 Ruby 2.2已经解决了这个问题,所以你可以在Ruby 2.2中使用'where.is': x
  2. 你必须使用火箭的符号是无效的标签:$set => x是有效的,但是$set: x不是。 在Ruby 2.2中,你可以用引号来解决这个问题: '$set': x会做正确的事情。
  3. 如果你在Hashes中使用不是符号的键,你必须使用火箭: 's' => x是有效的,但's': x不是。

你当然可以用一种明显的方式来解决上述问题:

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

但这只是丑陋而不必要的。

火箭不会破坏Ruby的哈希。