Pergunta

Percebi que as chaves para um hash podem ser omitidas se for o último elemento em uma matriz.Por exemplo, os formulários:

[1, 2, 3, :a => 'A', :b => 'B']
[1, 2, 3, a: 'A', b: 'B']

parecem ser idênticos a:

[1, 2, 3, {:a => 'A', :b => 'B'}]
[1, 2, 3, {a: 'A', b: 'B'}]

Eu sabia que esse tipo de omissão é possível para argumentos de um método, mas não observei que é possível para um array.Meu entendimento desta regra está correto?E isso está descrito em algum lugar?

Foi útil?

Solução

Este parece ser um novo recurso do 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 >

Outras dicas

Eu acho que os colchetes (e sem colchetes, como abaixo) são chamados de literais hash e ruby apenas tenta encaixá-los como um elemento de matriz.

>> [1, 2, c: 'd', e: 'f'] # ruby 1.9 hash literals
=> [1, 2, {:c=>"d", :e=>"f"}]

Mas não há mais regras para isso, eu acho - você não pode fazer isso:

>> [1, 2, c: 'd', e: 'f', 5] # syntax error, unexpected `]` (waiting for => or :)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top