为什么可以';我是否使用新的Ruby 1.9.2哈希语法将整数用作键?

为什么可以';我是否使用新的Ruby 1.9.2哈希语法将整数用作键?,ruby,hash,Ruby,Hash,Ruby 1.9.2中的新哈希语法意味着我可以执行以下操作: my_hash = {a: 1, b: 2, c: 3} 。。。这相当于: my_hash = {:a => 1, :b => 2, :c => 3} 好的,使用旧语法可以这样做(第一个键是整数): 我发现甚至可以像这样混合新旧语法: my_hash = {1 => 1, b: 2, c: 3} 因此,如果我们援引“最小意外原则”,人们会认为以下内容是合法的: my_hash = {1: 1, b: 2,

Ruby 1.9.2中的新哈希语法意味着我可以执行以下操作:

my_hash = {a: 1, b: 2, c: 3}
。。。这相当于:

my_hash = {:a => 1, :b => 2, :c => 3}
好的,使用旧语法可以这样做(第一个键是整数):

我发现甚至可以像这样混合新旧语法:

my_hash = {1 => 1, b: 2, c: 3}
因此,如果我们援引“最小意外原则”,人们会认为以下内容是合法的:

my_hash = {1: 1, b: 2, c: 3}
。。。但事实并非如此。它会生成一个语法错误:

SyntaxError: (irb):40: syntax error, unexpected '='
my_hash =  = {1: 1, b: 2, c: 3}

有人能解释一下这是否是解析器的一个限制,或者有很好的理由说明这是不可能的,或者是允许的吗?

此语法仅适用于Ruby“symbols”,并且是常见用法的替代:

:symbol => 5

而不是作为一个通用键。而其他人则以最不令人惊讶的原则(参见)对此进行了描述。

因为
a:1
等同于
:a=>1
,而不是
a=>1
,POL规定
1:1
应该等同于
:1=>1
,这两者都会导致语法错误。是的。。。我现在明白了;当然讽刺的是,这是我唯一没有尝试的实验。我想我自己顽固的先入之见妨碍了POL!谢谢你的澄清。啊。。。这完全有道理。我没有意识到新的语法只适用于符号。谢谢你超自然的快速反应。
:symbol => 5