ruby新的带字符串键的哈希冒号表示法

ruby新的带字符串键的哈希冒号表示法,ruby,Ruby,使用ruby 1.9.3,字符串键似乎无法与哈希冒号符号配合使用: 1.9.3p194 :005 > {abc: 5} => {:abc=>5} 1.9.3p194 :004 > {'abc': 5} SyntaxError: (irb):4: syntax error, unexpected ':', expecting tASSOC {'abc': 5} ^ 我想我运行的是正确版本的Ruby 1.9.3p194 :006 > RUBY_EN

使用ruby 1.9.3,字符串键似乎无法与哈希冒号符号配合使用:

1.9.3p194 :005 > {abc: 5}
 => {:abc=>5} 

1.9.3p194 :004 > {'abc': 5}
SyntaxError: (irb):4: syntax error, unexpected ':', expecting tASSOC
{'abc': 5}
       ^
我想我运行的是正确版本的Ruby

1.9.3p194 :006 > RUBY_ENGINE
 => "ruby" 
1.9.3p194 :007 > RUBY_VERSION
 => "1.9.3" 

这是正确的-哈希的新冒号表示法只有在键是符号时才有效

对不起,事情就是这样

更新:在ruby 2.2及更高版本中,使用新的表示法支持通用符号(作为键的字符串仍然不受支持):


为此打开了一个功能请求-仅当键是一些符号时有效。例如,您不能将其与
:$set
:'pan.cakes'
@muistooshort-Fair point一起使用。我也这么怀疑,但在鹤嘴锄上找不到证据。你收到传票了吗?谢谢你的快速回复。人们是如何处理这件事的?当你有一个字符串时,仅仅使用火箭散列符号?我没有引用,我阅读了C源代码来找出什么是允许的,因为我找不到权威的定义。我认为或多或少是这样的,
^[a-zA-Z_u2;]\w*
@phillie:是的,除了一组特定的符号之外,你必须使用hashrocket。我们已经讨论过几次了:,还有一些我现在找不到的。
irb
2.2.2 :001 > {'abc': 5}
=> {:abc=>5}