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?
risposta
L'autore di quel post è troppo drammatico e folle, lo =>
è stillquitenecessary. In particolare:
- È 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+. - È 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. - È 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.
s/eccessivamente drammatico e folle/drammatico e advocational con un omaggio eloquente /. Il resto dei tuoi punti sta in piedi. – dbenhur
Sono d'accordo, è sicuramente uno dei post più eloquenti su un aggiornamento di lingua. Anche se un po 'fuorviante: D. – mahemoff
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. –
Penso che quel tizio usi solo Ruby con Rails. –