Ci sono alcuni fastidi nell'usare i simbolihash. Ad esempio, la gemma JSON che usiamo restituisce sempre le stringhe da qualsiasi stringa JSON che è stata analizzata, quindi dovunque facciamo riferimento a un hash generato dalla decodifica JSON, dobbiamo usare una combinazione di stringhe e simboli per accedere agli hash.
Dal punto di vista dello stile, è giusto mantenere le cose coerenti usando solo le stringhe?
risposte:
3 per risposta № 1Le stringhe sono mutabili, quindi ogni volta che fai riferimento "foo"
rubino crea un nuovo oggetto. Puoi testarlo chiamando "foo".object_id
in irb. I simboli, d'altra parte, non lo sono, quindi ogni volta che fai riferimento :foo
rubino restituisce lo stesso oggetto.
Riguardo allo "stile" e alla "coerenza" puoi sempre usare hash.symbolize_keys!
per i dati json ricevuti, questo trasformerà tutte le chiavi stringa in simboli. E viceversa - hash.stringify_keys!
per renderli di nuovo stringhe.
0 per risposta № 2
Non esiste una regola che dice che una chiave hash dovrebbe essere un simbolo.
Il simbolo-come-chiave è visto molto in Rails come aconvenzione ... Rails fa un sacco di uso degli hash passanti per consentire più parametri, e le chiavi in tali hash sono spesso simboli per indicare che sono parametri attesi / permessi per una chiamata di metodo.
0 per risposta № 3
Per l'indeciso tra di noi:
http://as.rubyonrails.org/classes/HashWithIndifferentAccess.html