我意识到如果它是数组中的最后一个元素,则可以省略散列的花括号。例如,表格:
[1, 2, 3, :a => 'A', :b => 'B']
[1, 2, 3, a: 'A', b: 'B']
似乎与以下内容相同:
[1, 2, 3, {:a => 'A', :b => 'B'}]
[1, 2, 3, {a: 'A', b: 'B'}]
我知道这种遗漏对于方法的参数是可能的,但没有注意到数组是可能的。我对这条规则的理解正确吗?而且,这是在某处描述的吗?
我意识到如果它是数组中的最后一个元素,则可以省略散列的花括号。例如,表格:
[1, 2, 3, :a => 'A', :b => 'B']
[1, 2, 3, a: 'A', b: 'B']
似乎与以下内容相同:
[1, 2, 3, {:a => 'A', :b => 'B'}]
[1, 2, 3, {a: 'A', b: 'B'}]
我知道这种遗漏对于方法的参数是可能的,但没有注意到数组是可能的。我对这条规则的理解正确吗?而且,这是在某处描述的吗?
这似乎是 1.9 的一个新特性:
$ rvm use 1.8.7
$ irb
ruby-1.8.7-p352 :001 > x = [ 1,2,3,:a => 4, :b => 5 ]
SyntaxError: compile error
(irb):1: syntax error, unexpected tASSOC, expecting ']'
x = [ 1,2,3,:a => 4, :b => 5 ]
^
from (irb):1
ruby-1.8.7-p352 :002 > exit
$ rvm use 1.9.3
$ irb
ruby-1.9.3-p0 :001 > x = [ 1,2,3,:a => 4, :b => 5 ]
=> [1, 2, 3, {:a=>4, :b=>5}]
ruby-1.9.3-p0 :002 >
我认为括号(并且没有括号,如下所示)被称为哈希文字,而 ruby 只是试图将它作为一个数组元素来拟合。
>> [1, 2, c: 'd', e: 'f'] # ruby 1.9 hash literals
=> [1, 2, {:c=>"d", :e=>"f"}]
但我认为它没有更多规则 - 你不能这样做:
>> [1, 2, c: 'd', e: 'f', 5] # syntax error, unexpected `]` (waiting for => or :)