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 }
- 第一行是通用的 Hash 文字表示法(也适用于非符号键),键的默认符号文字表示法。
- 第二行是由
红宝石 2Ruby 1.9用于以符号为键的哈希。 - 第三行同样是通用的 Hash 文字表示法,键的另一种 Symbol 文字表示法。(如果您需要在符号名称中包含空格或其他花哨的字符,则此替代符号文字符号很方便。)
- 第四行是上面的轻微变化,它也允许在符号名称中进行字符串插值。
前两个符号记录在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] 所做的”。)