Hash Rocket è deprecato?


99

Il ben citato post RIP Hash rocket sembrerebbe implicare che la sintassi Hash Rocket ( :foo => "bar") è deprecata a favore del nuovo hash in stile JSON Ruby ( foo: "bar"), ma non riesco a trovare alcun riferimento definitivo che indichi la forma Hash Rocket è attualmente deprecato / sconsigliato a partire da Ruby 1.9.


Penso che quel ragazzo usi solo Ruby con Rails.
Niklas B.

Lunga vita al razzo
HashRocketSyntax

Rocket sta ancora andando forte 🚀
mahemoff

Risposte:


132

L'autore di quel post sul blog è eccessivamente drammatico e sciocco, =>è ancora abbastanza necessario . In particolare:

  1. È necessario utilizzare il razzo per i simboli che richiedono la citazione: :'where.is' => xè valido ma 'where.is': xnon lo è. Ruby 2.2 ha risolto questo problema, quindi puoi dirlo 'where.is': xin Ruby 2.2+.
  2. Devi usare il razzo per i simboli che non sono etichette valide: :$set => xè valido ma $set: xnon lo è. In Ruby 2.2 + è possibile aggirare questo problema con le citazioni: '$set': xfarà la cosa giusta.
  3. Devi usare il razzo se usi chiavi nei tuoi hash che non sono simboli: 's' => xè valido ma 's': xè qualcosa di completamente diverso.

Puoi ovviare a quanto sopra nel modo ovvio ovviamente:

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

ma è solo brutto e inutile.

Il razzo non andrà da nessuna parte senza paralizzare Ruby's Hash.


6
s / eccessivamente drammatico e sciocco / drammatico e sostenitore con un eloquente omaggio /. Il resto dei tuoi punti resta valido.
dbenhur

15
Devi chiederti se l'uso della nuova sintassi, quando devi ancora fare affidamento sulla vecchia sintassi per determinati scenari, complicherà semplicemente il nostro codice.
Dave Rapin

4
@ DaveRapin: Ecco perché non mi preoccupo della sintassi non missilistica. Faccio un bel po 'di lavoro con MongoDB e spesso uso non simboli come chiavi hash (non importa tutto quello h[:s]che faccio) quindi la sintassi dello stile JavaScript è solo una complicazione inutile per me. Mi sembra un'idea gee-whiz mal pensata e ora siamo bloccati con essa e la relativa confusione per sempre.
mu è troppo breve

8
@DaveRapin Considerare a = [0,1,4,9]vs. a = Array.new(4){ |i| i**2 }. Perché utilizzare il primo quando a volte è necessario utilizzare il secondo? Risposta: perché è più conveniente. TIMTOWTDI complica il linguaggio, ma questo è un compromesso. Lua è davvero elegante in fondo e quindi facile da imparare, ma fastidioso da programmare. Ruby ha molti casi speciali e funzionalità personalizzate che rendono più difficile l'apprendimento, ma una gioia da programmare. Io, per esempio, benvenuto la notazione più semplice da digitare e più facile da leggere hash-with-symbol-keys per il caso comune.
Phrogz

7
Anche se meno divertente da digitare, preferisco decisamente il razzo hash. Perché? perché significa che ogni volta che utilizzo un simbolo per una chiave posso cercarlo ovunque nel mio progetto cercando una stringa che inizia con i due punti. Per me, la mancanza di coerenza tra i caratteri effettivi usato per indicare la chiave my_hash = {a:1}ed myhash[:a] = 1è, per lo meno, piuttosto fastidioso. Sono sicuro di non essere l'unico a sentirsi in questo modo.
Huliax
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.