Altri guardando le risposte qui potrebbero trovare interessante sapere che un'eccezione si verifica quando si utilizza interi come chiavi simbolo in una Ruby hash{symbol: value}
hash = {1: 'one'} # will not work
hash = {1 => 'one'} # will work
Spiegazione richiesto:
La risposta più semplice perché il primo esempio non riesce è probabilmente che to_sym
non è un metodo che è stato implementato per gli interi Fixnum.
Per approfondire la spiegazione del perché, uno dei principali vantaggi dell'uso dei simboli è che due simboli sono in effetti "lo stesso oggetto". O almeno condividono gli stessi ID oggetto.
:foo.object_id == :foo.object_id
=> true
stringhe che sono gli stessi non condividono gli stessi oggetti, e quindi non condividono gli stessi ID oggetto.
"foo".object_id == "foo".object_id
=> false
Come simboli, i numeri interi Fixnum che sono gli stessi avranno gli stessi ID oggetto. Quindi non hai davvero bisogno di convertirli in simboli.
one = 1
=> 1
uno = 1
=> 1
one.object_id
=> 3
one.object_id == uno.object_id
=> true
Hai provato? Sulla tua console, puoi digitare IRB e ottenere una console ruby .. abbastanza utile per provare questo tipo di cose ... In argomento, dovresti essere in grado di usare gli interi bene. – Deleteman
["eccetto che l'indicizzazione avviene tramite chiavi arbitrarie di qualsiasi tipo di oggetto"] (http://www.ruby-doc.org/core/Hash.html). I numeri interi sono oggetti in Ruby, quindi anche gli hash sono così che potresti usare gli hash come chiavi. –