Sì, c'è una differenza. Questi sono legali:
h = { :$in => array }
h = { :'a.b' => 'c' }
h[:s] = 42
ma questi non sono:
h = { $in: array }
h = { 'a.b': 'c' } # but this is okay in Ruby2.2+
h[s:] = 42
È anche possibile utilizzare qualsiasi cosa come una chiave con =>
in modo da poter fare questo:
h = { C.new => 11 }
h = { 23 => 'pancakes house?' }
ma si puo' t fare questo:
h = { C.new: 11 }
h = { 23: 'pancakes house?' }
Lo stile JavaScript (key: value
) è utile solo se tutte le chiavi Hash sono simboli "semplici" (più o meno qualcosa che corrisponde a /\A[a-z_]\w*\z/i
, AFAIK il parser utilizza il proprio modello di etichetta per queste chiavi).
I simboli di stile :$in
mostrano un bel po 'quando si usa MongoDB, quindi finirai a mischiare gli stili di hash se usi MongoDB. Inoltre, se lavori con chiavi Hash specifiche (h[:k]
) anziché solo con hash interi (h = { ... }
), dovrai comunque utilizzare lo stile del primo carattere per i simboli; dovrai anche usare lo stile dei due punti iniziali per i simboli che utilizzi al di fuori degli Hash. Preferisco essere coerente, quindi non mi preoccupo affatto dello stile JavaScript.
Alcuni dei problemi con lo stile JavaScript sono stati risolti in Ruby 2.2. È ora possibile utilizzare le virgolette se si dispone di simboli che non sono le etichette valide, ad esempio:
h = { 'where is': 'pancakes house?', '$set': { a: 11 } }
ma è ancora necessario il hashrocket se le chiavi non sono simboli.
fonte
2011-12-30 01:30:17
'h = {'a.b': 'c'}' è ora legale a partire da Ruby 2.2.0. Vedi https://bugs.ruby-lang.org/issues/4276 –
@BSeven: Grazie, ho aggiornato [la mia altra grande risposta hashrocket] (http://stackoverflow.com/a/10004344/479863) da un po 'di tempo fa questo. –
Perché ritieni che l'esempio di 'h [: s] = 42' si riferisca a questa domanda? A mio parere, lo stile JavaScript rispetto allo stile hashrocket è rilevante solo per la definizione della coppia chiave/valore hash, e non per indirizzare gli elementi hash per chiavi. Quindi l'esempio di 'h [s:] = 42' sembra fuorviante. –