Hash Rocket被弃用了吗?

mah*_*off 99 ruby syntax hash ruby-1.9 hashrocket

引用良好的RIP Hash火箭帖似乎暗示Hash Rocket语法(:foo => "bar")已被弃用foo: "bar",而不支持新的Ruby JSON风格的hash(),但我找不到任何明确的引用来说明Hash Rocket表单实际上从Ruby 1.9开始被弃用/未经过修改.

mu *_*ort 129

该博客文章的作者过于戏剧性和愚蠢, 仍然=>非常必要的.特别是:

  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.
Run Code Online (Sandbox Code Playgroud)

但这只是丑陋和不必要的.

没有摧毁Ruby的哈希,火箭不会去任何地方.

  • 您不得不怀疑是否使用新语法,当您仍然需要依赖于某些场景的旧语法时,只会使我们的代码复杂化. (15认同)
  • @DaveRapin考虑`a = [0,1,4,9]`vs`a = Array.new(4){| i | 我**2}` 当你有时需要使用后者时,为什么要使用前者?答:因为它更方便.TIMTOWTDI确实使语言复杂化,但这是一种权衡.Lua的核心非常优雅,因此易于学习,但实际编码很烦人.Ruby有许多特殊情况和自定义功能,这使得学习更难,但是编程很快乐.我欢迎对于常见情况,更简单,更容易阅读的Hash-with-symbol-key符号. (8认同)
  • 虽然键入的乐趣不大,但我绝对更喜欢哈希火箭.为什么?因为这意味着每当我使用符号作为键时,我可以通过搜索以冒号开头的字符串在我的项目中的任何地方搜索它.对我来说,用于表示"my_hash = {a:1}"和"myhash [:a] = 1"中的键的实际字符之间缺乏一致性,至少相当令人讨厌.我敢肯定,我不是唯一一个有这种感觉的人. (7认同)
  • s /过于戏剧性和愚蠢/戏剧性,以及雄辩的敬意/.其余的要点就是. (6认同)
  • @DaveRapin:这就是为什么我不打扰非火箭语法.我做了很多MongoDB工作,我经常使用非符号作为Hash键(更不用说所有的`h [:s]`我这样做)所以JavaScript风格的语法对我来说只是毫无意义的复杂化.对我来说,这似乎是一个思想不周的想法,现在我们仍然坚持它和相关的混乱. (4认同)