哈希火箭是否已被弃用?

106

著名的RIP Hash rocket post表明,Hash Rocket语法(:foo => "bar")已经被新的JSON风格哈希替代(foo: "bar")。然而,我找不到任何明确的参考资料表明自Ruby 1.9以来Hash Rocket形式实际上已经废弃/不建议使用。


1
我认为那个人只使用Ruby和Rails。 - Niklas B.
1
长命火箭。 - Kermit
2
火箭仍然保持强劲。 - mahemoff
1个回答

143

那篇博客文章的作者过于夸张和愚蠢了,=>符号仍然相当 必要的。 特别是:

  1. 对于不是有效标签的符号,您必须使用火箭符号::$set => x 是有效的,但 $set: x则不是。在 Ruby 2.2+ 中,您可以通过使用引号解决此问题:'$set': x 将做正确的事情。

  2. 如果您在哈希中使用键而不是符号(例如字符串、整数或常量),则必须使用火箭符号。例如,'s' => x 是有效的,但 's': x 则完全不同。

当然,您可以以明显的方式绕过上述问题:

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

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

如果不破坏Ruby的哈希表,火箭将无法前进。


9
你的其他观点都是正确的,只是“overly dramatic and foolish”这句话可以翻译为“过于夸张和愚蠢”,但更好的表达方式是“富有戏剧性和倡导性,并带有雄辩的致敬之意”。 - dbenhur
19
如果在某些情况下仍需要依赖旧的语法,是否使用新的语法会让我们的代码变得更加复杂,这是值得思考的。 - Dave Rapin
5
@DaveRapin: 这就是为什么我不关心非火箭语法。我做了很多MongoDB的工作,我经常使用非符号作为哈希键(别管我做了多少个 h[:s] ),所以JavaScript风格的语法对我来说只是无意义的复杂性。对我来说,它似乎是一个想当然的花哨点子,现在我们被困在了它和相关的混淆中。 - mu is too short
8
考虑 a = [0,1,4,9]a = Array.new(4){ |i| i**2 },为什么有时候需要使用后者而不是前者?答案是因为它更加方便。TIMTOWTDI 确实让语言变得更加复杂,但这是一种权衡。Lua 在核心上非常优雅,因此易于学习,但实际编程时会很烦人。Ruby 有很多特殊情况和自定义功能,使其更难学习,但却是一种愉悦的编程体验。我个人认为,更简单易读的 Hash-with-symbol-keys 符号键值表示法对于常见情况来说是受欢迎的。 - Phrogz
7
虽然打字不太好玩,但我绝对更喜欢哈希箭头。为什么呢?因为这意味着每当我使用符号作为键时,我都可以通过搜索以冒号开头的字符串来在我的项目中任何地方搜索它。对我来说,在my_hash = {a:1}myhash [:a] = 1中用于表示键的实际字符之间缺乏一致性,至少相当令人恼火。我相信我不是唯一有这种感觉的人。 - Huliax
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接