是”符号名称’:“某些值”} Hashes的有效Ruby 2语法?

TL; DR – 问题

是{‘symbol name’:5}和{“symbol name”:5} Hashes的有效且定义良好的Ruby 2语法?

哈希的6个符号,其中2个未知

在Ruby 2中,以下Hash文字符号是等效的:

{ :my_key => 5 }
{ my_key: 5 }
{ :'my_key' => 5 }
{ :"my_key" => 5 }

>第一行是通用Hash文字符号(也适用于非符号键),使用键的认符号文字表示法.
>第二行是Ruby 2 Ruby 1.9为Hashes with Symbols作为键引入的新的简写符号.
>第三行也是通用Hash文字符号,键的替代符号文字符号. (如果您需要在符号名称中包含空格或其他花哨字符,则此备用符号文字符号很方便.)
>第四行是上面的略微变化,也允许在符号名称中进行字符串插值.

前两个符号是documented on the Core API page for Hash.第四个符号只是插入另一个符号文字符号(即documented in the Core API page for Symbol)到第一个哈希表示法,因此它对于哈希文字并不是一个不同的表示法.第三种表示法也是如此.在Symbol Core API页面上没有提到单引号字符串文字表示法并没有给我太多打扰,因为它看起来像我期望的那样工作.

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

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

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

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

(不确定这个问题是否有意义,如果是as Brian Shirai claims“Ruby是什么[MRI]做什么”.)

解决方法

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

以上所有行都不使用2.x-only语法.它们都是有效的1.9语法. (See demonstration.)

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

这是feature request #4276,它于0700年登陆.这意味着它在2.1甚至更旧版本中的语法无效.它还意味着声称实现2.2的实现必须支持它.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...