【问题标题】:In the future, can I use the new hash syntax with array as key?将来,我可以使用以数组为键的新哈希语法吗?
【发布时间】:2015-09-15 15:09:25
【问题描述】:

我正在创建一个以数组为键的哈希,例如:

versions = { [1, 2, 3] => 'some-code-name' }

我也想这样做,但使用新的哈希语法,这会引发错误:

versions = { [1, 2, 3] : 'some-code-name' }
# => SyntaxError: (irb):18: syntax error, unexpected ':', expecting =>

我想知道他们将来是否会实现它(只是因为它是语法糖)。

有一个answer 解释说:

此语法仅适用于 Ruby 的“符号”,是常见用法的替代:

:symbol => 5

而不是作为通用键。更多关于符号在这里。其他人已经写过关于最小惊喜原则的文章(见这里)。

但我已经能够对 string 做同样的事情,并认为他们可能会将此功能扩展为在哈希中全局可用。

【问题讨论】:

  • 我不会真的认为使用: 而不是=> 是“语法糖”。
  • 你的意思是你“已经能够用String做同样的事情”?那不可能是真的。换句话说,这个问题所声称的内容无法复制。
  • @sawa,只是一个错字。意思是说“字符串”而不是字符串对象,猜你只是在钓鱼:)
  • 静止。没有任何版本的 Ruby 发布过,目前正在开发中或计划中支持 JSON 样式哈希语法的字符串键。最初,它仅支持也是有效标识符(更准确地说,有效标签)的符号。最近,它被扩充为支持对不是有效 Ruby 标识符的符号进行引用。我不知道当你说你“已经能够用 string 做同样的事情”时你在说什么语言,但它肯定不是 Ruby。也许你可以举一个你在说什么的例子。我的猜测是您正在使用某种预处理器。
  • :'between quotes' 只是普通的 Symbol 文字语法,用于不是有效的 Ruby 标识符的符号。它已被支持多年。冒号/JSON 样式的哈希语法始终仅用于符号键。它主要是作为关键字参数的中间步骤引入的。请注意,语法所基于的 ECMAScript 对象字面量也仅支持作为不带引号的键的有效 ECMAScript 标识符的字符串(ECMAScript 没有符号),而不是数字或数组或其他任何东西。

标签: ruby hashmap


【解决方案1】:

但我已经能够用string 做同样的事情......

我认为您指的是"name": value 语法。

让我们看看:

{"foo": 123} #=> {:foo=>123}

注意“字符串”会发生什么?它变成了一个符号。

在散列文字中"foo": value:"foo" => value 的快捷方式,:"foo" 实际上是一个符号:

:"foo" #=> :foo

我想知道他们将来是否会实现它(只是因为语法糖)?

谁知道?但我不这么认为。

【讨论】:

  • 抱歉最后的评论,查看电话并错过了最后一点:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 2013-11-10
  • 1970-01-01
相关资源
最近更新 更多