Otros buscan en las respuestas aquí que le resulte interesante saber que una excepción ocurre cuando se utiliza enteros como teclas de símbolos en un Ruby hash{symbol: value}
hash = {1: 'one'} # will not work
hash = {1 => 'one'} # will work
explicación solicitada:
La respuesta más simple por qué el primer ejemplo falla es probable que to_sym
no sea un método implementado para enteros Fixnum.
Para profundizar en la explicación de por qué, uno de los principales beneficios del uso de símbolos es que dos símbolos son "el mismo objeto". O al menos comparten los mismos ID de objeto.
:foo.object_id == :foo.object_id
=> true
Las cadenas que son iguales no comparten los mismos objetos y, por lo tanto, no comparten los mismos ID de objeto.
"foo".object_id == "foo".object_id
=> false
Al igual que los símbolos, números enteros Fixnum que son los mismos tendrán los mismos identificadores de los objetos. Por lo tanto, no es necesario convertirlos en símbolos.
one = 1
=> 1
uno = 1
=> 1
one.object_id
=> 3
one.object_id == uno.object_id
=> true
¿Lo has probado? En su consola, puede escribir IRB y obtener una consola de rubí ... bastante útil para probar este tipo de cosas ... Sobre el tema, debería poder usar enteros muy bien. – Deleteman
["excepto que la indexación se realiza mediante claves arbitrarias de cualquier tipo de objeto"] (http://www.ruby-doc.org/core/Hash.html). Los enteros son objetos en Ruby, por lo que son hashes para el caso, por lo que podría usar Hashes como claves. –