2011-01-11 14 views
32

Mientras aprendía Ruby me encontré con el operador "=>" ocasionalmente. Por lo general, lo veo en la forma deEn Ruby, ¿qué significa "=>" y cómo funciona?

:symbol => value 

y parece para ser utilizado con frecuencia al pasar los valores de funciones. ¿Cómo se llama exactamente ese operador? ¿Qué significa/significa? ¿Está integrado en Ruby o es algo que marcos diferentes como Rails y DataMapper agregan a la clase de símbolo? ¿Se usa solo junto con la clase de símbolo? Gracias.

Respuesta

39

=> separa las claves de los valores en un literal hashmap. No se puede descargar y no está específicamente conectado a símbolos.

Un hashmap literal tiene el formato {key1 => value1, key2 => value2, ...}, pero cuando se usa como el último parámetro de una función, puede dejar las llaves. Entonces, cuando vea una llamada de función como f(:a => 1, :b => 2), se llama al f con un argumento, que es un hashmap que tiene las claves :a y :b y los valores 1 y 2.

+0

Para más lectura, ver el pico [sección tutorial sobre Hashes] (http://phrogz.net/ProgrammingRuby/frameset.html?content=http://phrogz.net/ProgrammingRuby/tut_containers.html%23hashes) y [sección de referencia sobre Hashes] (http://phrogz.net/ProgrammingRuby/frameset.html?content=http://phrogz.net/ProgrammingRuby/language.html%23hashes). Tenga en cuenta que en Ruby 1.9 puede especificar alternativamente un par clave/valor literal en un hash como este 'foo: bar', que crea la clave como el símbolo': foo'. – Phrogz

+0

Divide los problemas grandes en otros más pequeños. Si conoces las matrices asociativas y los Símbolos de rubí, no tendrás ningún problema para entender Hashes. Así – karatedog

+0

sólo para aclarar, aquí es un ejemplo de DataMapper propiedad: título, cuerdas,: required => true,: longitud => 5..200 Esto es lo mismo que propiedad (: título, cuerdas, {: required => true,: length => 5..200}) ? –

11

Es posible que escuche a este operador como un "cohete hash", lo que significa que lo usa para definir un hash ruby.

Esta es la documentación de Ruby Hash, si usted no está familiarizado: http://www.ruby-doc.org/core/classes/Hash.html

Tenga en cuenta que en Ruby 1.9, si está definiendo un hash que utiliza símbolos como claves, ahora hay una sintaxis alternativa disponible para usted : http://blog.peepcode.com/tutorials/2011/rip-ruby-hash-rocket-syntax

+0

+1 para la sintaxis 1.9. –

4

Si usted quiere hacer cualquier googlear más, => a veces se llama una hashrocket, porque se ve como un cohete (en el mismo sentido que <=> se parece a una nave espacial), y se usa en los hashes.

O podría usar SymbolHound.

+0

Eso es bueno saber. Busqué bastante en Google para obtener información, pero no llegué a ninguna parte. Gracias por el consejo. –

+0

@DustinMartin Recientemente me encontré con un motor de búsqueda llamado SymbolHound, en caso de que tenga dificultades para buscar otra sintaxis. –

4

Consejo: si se está usando un hash como {:a => "A", :b => "B"}, en Ruby 1.9, que se puede utilizar como un hash JSON:

{ 
    a: "A", 
    b: "B" 
} 
+0

ops. acabo de notar que lo mencioné arriba :) – amrnt

0

Además de In Ruby what does "=>" mean and how does it work?:

Usted hará su mayoría ver el => para definir parámetros para una función. Piense en esto como una buena conveniencia: no necesita recordar el orden correcto de sus parámetros, ya que todos los parámetros están envueltos en un hash gigante. Así que si usted tiene un método de ayuda simple como

link_to "My link", my_path, :confirm => "Are you sure?"

esto es mucho mejor que

link_to "My link", my_path, null, null, null, null, "Are you sure?"

sólo porque desea utilizar un parámetro rara vez se utiliza. Por lo tanto, pasar los parámetros con un hash es solo una convención en Ruby/Rails para facilitar la vida.