哈希火箭已弃用吗?


99

引文广为人知的RIP Hash火箭帖子似乎暗示,:foo => "bar"不赞成使用Hash Rocket语法()来支持新的Ruby JSON样式的hash(foo: "bar"),但是我找不到任何明确的引用来说明Hash Rocket表单从Ruby 1.9开始实际上已弃用/不建议使用。


我认为那家伙只将Ruby与Rails一起使用。
Niklas B.


火箭依然强劲🚀
mahemoff

Answers:


132

该博客文章的作者过于戏剧化和愚蠢,这 仍然=>很有必要的。特别是:

  1. 您必须将火箭用于需要引号的符号::'where.is' => x有效但'where.is': x无效。Ruby 2.2解决了这个问题,因此您可以'where.is': x在Ruby 2.2+中说。
  2. 您必须将火箭用于无效标签的符号::$set => x有效但$set: x无效。在Ruby 2.2+中,您可以使用引号解决此问题:'$set': x将做正确的事情。
  3. 如果您在哈希中使用的不是符号的密钥,则必须使用火箭:'s' => x有效但's': x完全不同。

当然,您可以通过明显的方式来绕过以上内容:

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

但这是丑陋且不必要的。

如果不破坏Ruby的哈希,火箭将无处可去。


6
s /过于戏剧化和愚蠢/戏剧性和崇高敬意。您其余的观点仍然有效。
dbenhur

15
您想知道在某些情况下仍然需要依靠旧语法使用新语法时,是否会使我们的代码复杂化。
戴夫·拉平

4
@DaveRapin:这就是为什么我不理会非火箭式语法的原因。我做了相当多的MongoDB工作,并且我经常使用非符号作为Hash键(h[:s]我不介意我做的所有事情),所以JavaScript样式语法对我来说毫无意义。对我来说,这似乎是一个经过深思熟虑的“ gee-whiz”想法,但现在我们始终坚持下去,并永远避免相关的困惑。
mu太短了

8
@DaveRapin考虑a = [0,1,4,9]a = Array.new(4){ |i| i**2 }。为什么有时需要使用前者时为什么要使用前者?答:因为它更方便。TIMTOWTDI确实使语言复杂化,但这是一个折衷。Lua的核心真的很优雅,因此很容易学习,但实际上编写代码很烦人。Ruby有很多特殊情况和自定义功能,使学习起来更困难,但编程起来却很愉快。通常情况下,类型更简单,更易于阅读的带符号哈希键表示法。
Phrogz

7
虽然键入的乐趣较少,但我绝对更喜欢哈希火箭。为什么?因为这意味着我每次在符号上使用符号时,都可以通过搜索以冒号开头的字符串来在项目中的任何位置搜索它。对我来说,缺乏实际的字符之间的一致性用来表示在关键my_hash = {a:1}myhash[:a] = 1是,至少,相当恼人。我敢肯定,我不是唯一这样的人。
Huliax
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.