是''符号名称':"某些值"} Hashes的有效Ruby 2语法?

das*_*s-g 5 ruby language-lawyer ruby-2.0 ruby-2.1 ruby-2.2

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 }
Run Code Online (Sandbox Code Playgroud)
  1. 第一行是通用Hash文字符号(也适用于非符号键),使用键的默认符号文字表示法.
  2. 第二行是由新引入的简写符号 Ruby 2 Ruby 1.9 for Hashes with Symbols作为键.
  3. 第三行也是通用的Hash文字符号,键的替代符号文字符号.(如果您需要在符号名称中包含空格或其他花哨字符,则此备用符号文字符号很方便.)
  4. 第四行是上面的略微变化,它还允许在符号名称中进行字符串插值.

前两个符号被记载为核心API页面上Hash.所述第四符号是在备选符号文字符号只是堵塞(这是在用于核心API页记载Symbol)到第一散列符号,所以它不是真正的用于散列文字不同的符号.这同样适用于第三符号.在SymbolCore API页面上没有提到单引号字符串符号文字表示法并没有给我太多打扰,因为它似乎像我期望的那样工作.

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

{ "my_key": 5 }
{ 'my_key': 5 }
Run Code Online (Sandbox Code Playgroud)

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

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

(不确定这个问题是否有意义,如果是因为Brian Shirai声称 "Ruby是什么[MRI]做什么".)

cre*_*mno 7

{ :my_key => "my value" } 
{ my_key: "my value" }
{ :'my_key' => "my value" }
{ :"my_key" => "my value" }
Run Code Online (Sandbox Code Playgroud)

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

{ "my_key": "my value" }
{ 'my_key': "my value" }
Run Code Online (Sandbox Code Playgroud)

这个功能请求#4276登陆2.2.这意味着它在2.1或更旧的版本中是无效的语法.它还意味着声称实现2.2的实现必须支持它.