Pregunta

Me di cuenta de que las llaves de un hash se pueden omitir si es el último elemento de una matriz.Por ejemplo, los formularios:

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

parecen ser idénticos a:

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

Sabía que este tipo de omisión es posible para los argumentos de un método, pero no había notado que fuera posible para una matriz.¿Es correcto mi entendimiento de esta regla?¿Y esto se describe en alguna parte?

¿Fue útil?

Solución

Esta parece ser una característica nueva de 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 >

Otros consejos

Creo que los corchetes (y no los corchetes, como se muestra a continuación) se denominan literales hash y ruby solo intenta ajustarlos como un elemento de matriz.

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

Pero creo que no hay más reglas. No puedes hacer esto:

>> [1, 2, c: 'd', e: 'f', 5] # syntax error, unexpected `]` (waiting for => or :)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top