Omissione di parentesi graffe per un hash in un array
-
27-10-2019 - |
Domanda
Mi sono reso conto che le parentesi graffe per un hash possono essere omesse se è l'ultimo elemento di un array.Ad esempio, i moduli:
[1, 2, 3, :a => 'A', :b => 'B']
[1, 2, 3, a: 'A', b: 'B']
sembrano essere identici a:
[1, 2, 3, {:a => 'A', :b => 'B'}]
[1, 2, 3, {a: 'A', b: 'B'}]
Sapevo che questo tipo di omissione è possibile per gli argomenti di un metodo, ma non avevo notato che è possibile per un array.La mia comprensione di questa regola è corretta?E questo è descritto da qualche parte?
Soluzione
Questa sembrerebbe essere una nuova funzionalità di 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 >
Altri suggerimenti
Penso che le parentesi (e nessuna parentesi, come sotto) siano chiamate letterali hash e ruby cerca semplicemente di adattarle come un elemento dell'array.
>> [1, 2, c: 'd', e: 'f'] # ruby 1.9 hash literals
=> [1, 2, {:c=>"d", :e=>"f"}]
Ma non ci sono più regole, penso - non puoi farlo:
>> [1, 2, c: 'd', e: 'f', 5] # syntax error, unexpected `]` (waiting for => or :)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow