【发布时间】:2015-10-07 14:46:57
【问题描述】:
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 }
- 第一行是通用哈希文字表示法(也适用于非符号键),键的默认符号文字表示法。
- 第二行是
Ruby 2Ruby 1.9 引入的新的速记符号,用于以符号为键的哈希。 - 第三行同样是通用的 Hash 文字表示法,键的另一种 Symbol 文字表示法。 (如果您需要在符号名称中包含空格或其他花哨的字符,则此替代符号文字符号很方便。)
- 第四行与上述稍有不同,它还允许在符号名称中插入字符串。
前两个符号是documented on the Core API page for Hash。 fourth 表示法只是在第一个 Hash 表示法中插入了一个替代的 Symbol 文字表示法(即documented in the Core API page for Symbol),因此它实际上并不是 Hash 文字的不同表示法。 third 符号也是如此。 Symbol Core API 页面上没有提到单引号字符串符号文字表示法并没有让我太困扰,因为它似乎像我预期的那样工作。
但最近我注意到以下符号也可以使用,并且也等同于上面的:
{ "my_key": 5 }
{ 'my_key': 5 }
虽然它有点一致(并且像我预期的那样工作,如果我认为这是有效的)并且可能有用,但我发现这足以让我有点惊讶。我找不到关于这种语法的任何文档,而且这种语法不仅仅是通过将记录的符号插入其他记录的符号(如上面的第三个和第四个符号)来构建的。 (这更像是将第二个与第三个或第四个符号“合并”。)因此我想知道:
这只是我的 Ruby 解释器 (MRI ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux]) 对未定义的语法很好,或者这是我可以从任何符合 Ruby 2 的实现中获得的行为?
(不确定这个问题是否有意义,如果是 as Brian Shirai claims 表示“Ruby 是 [MRI] 所做的”。)
【问题讨论】:
-
该语法在 Ruby 2 中可用
-
@jollarvia:你的意思是 2.2、2.0 和 2.1 看到
{'s': v }是一个语法错误。 -
您可以考虑自己将这种新语法的示例添加到文档中。 documenting-ruby.org 是一个有用的资源。
-
因为它与我的问题无关,因为引入了类似 JavaScript 的语法(在问题中称为“第二表示法”)的版本,我根据 cremno's answer 已经 corrected the version number。
标签: ruby language-lawyer ruby-2.0 ruby-2.1 ruby-2.2