2012-04-04 23 views
88

Il ben citato RIP Hash rocket post sembrerebbe implicare la sintassi di Hash Rocket (:foo => "bar") è deprecato in favore dell'hash in stile JSON new-to-Ruby (foo: "bar"), ma non riesco a trovare alcun riferimento definitivo che indichi l'Hash Rocket il modulo è in realtà deprecato/sconsigliato a partire da Ruby 1.9.Hash Rocket è deprecato?

+0

Penso che quel tizio usi solo Ruby con Rails. –

risposta

119

L'autore di quel post è troppo drammatico e folle, lo => è stillquitenecessary. In particolare:

  1. È necessario utilizzare il razzo per i simboli che richiedono citando: :'where.is' => x è valido, ma non è . Ruby 2.2 ha risolto questo problema, quindi puoi dire in Ruby 2.2+.
  2. È necessario utilizzare il razzo per i simboli che non sono etichette valide: :$set => x è valido ma non lo è $set: x. In Ruby 2.2+ è possibile aggirare questo problema con le virgolette: '$set': x farà The Right Thing.
  3. È necessario utilizzare il razzo se si utilizzano chiavi negli hash che non sono simboli: 's' => x è valido ma 's': x è qualcosa di completamente diverso.

È possibile kludge tutto il sopra nella maniera ovvia, naturalmente:

h = { } 
h[:'where.is'] = 'pancakes house?' 
# etc. 

ma questo è solo brutta e inutile.

Il razzo non sta andando da nessuna parte senza aver rovinato gli Hash di Ruby.

+4

s/eccessivamente drammatico e folle/drammatico e advocational con un omaggio eloquente /. Il resto dei tuoi punti sta in piedi. – dbenhur

+0

Sono d'accordo, è sicuramente uno dei post più eloquenti su un aggiornamento di lingua. Anche se un po 'fuorviante: D. – mahemoff

+13

Ci si deve chiedere se l'uso della nuova sintassi, quando si deve ancora fare affidamento sulla vecchia sintassi per determinati scenari, complicherà semplicemente il nostro codice. –