5

TL;DR — 问题

是否是有效{ 'symbol name': 5 }{ "symbol name": 5 }定义明确的 Ruby 2 哈希语法?

6 种哈希表示法,其中 2 种未知

在 Ruby 2 中,以下 Hash 文字表示法是等价的:

{ :my_key => 5 }
{ my_key: 5 }
{ :'my_key' => 5 }
{ :"my_key" => 5 }
  1. 第一行是通用的 Hash 文字表示法(也适用于非符号键),键的默认符号文字表示法。
  2. 第二行是由红宝石 2 Ruby 1.9用于以符号为键的哈希。
  3. 第三行同样是通用的 Hash 文字表示法,键的另一种 Symbol 文字表示法。(如果您需要在符号名称中包含空格或其他花哨的字符,则此替代符号文字符号很方便。)
  4. 第四行是上面的轻微变化,它也允许在符号名称中进行字符串插值。

两个符号记录在Hash. 第四种表示法只是在第一个 Hash 表示法中插入一个备用 Symbol 文字表示法(在Core API 页面中记录Symbol),因此它实际上并不是 Hash 文字的不同表示法。第三个符号也是如此。核心 API 页面上没有提到单引号字符串符号文字表示法Symbol并没有让我太困扰,因为它似乎像我期望的那样工作。

但最近我注意到以下符号也可以工作,并且也等同于上面的符号:

{ "my_key": 5 }
{ 'my_key': 5 }

虽然它有点一致(并且像我预期的那样工作,如果我认为这完全有效)并且可能有用,但我发现这足以让我有点惊讶。我找不到关于这种语法的任何文档,而且这种语法不仅仅是通过将记录的符号插入其他记录的符号(如上面的第三个和第四个符号)来构建的。(这更像是将第二个与第三个或第四个符号“合并”。)因此我想知道:

这只是我的 Ruby 解释器( MRI ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux] )对未定义的语法很好,还是我可以从任何符合 Ruby 2 的实现中得到这种行为?

(不确定这个问题是否有意义,如果正如 Brian Shirai 所说的“Ruby 是 [MRI] 所做的”。)

4

2 回答 2

7
{ :my_key => "my value" } 
{ my_key: "my value" }
{ :'my_key' => "my value" }
{ :"my_key" => "my value" }

以上行都没有使用 2.x-only 语法。它们也是有效的 1.9 语法。(见示范。)

{ "my_key": "my value" }
{ 'my_key': "my value" }

那是功能请求#4276,它登陆2.2。这意味着它在 2.1 甚至更早的版本中是无效的语法。这也意味着声称实现 2.2 的实现必须支持它。

于 2015-07-17T19:46:13.617 回答
0

如果你都是关于双引号和单引号,为什么不也这样做

{'my_key': 'my value' }并在您的列表中添加另一种构造哈希的方法?

于 2015-07-17T19:40:11.380 回答