Pregunta

Estoy buscando una explicación para lo que está pasando en la parte superior de artoo.io robots.Hay una declaración al principio de este ejemplo que utiliza el controlador del teclado:

require 'artoo'

connection :keyboard, adaptor: :keyboard
device :keyboard, driver: :keyboard, connection: :keyboard

Parece que se muestra alguna sintaxis taquigráfica/alternativa y me encantaría recibir una explicación de esa taquigrafía.Entiendo la sintaxis hash alternativa: :adapter => :keyboard.

¿Qué está pasando en esas dos últimas líneas de código anteriores?Qué es connection?¿Es una clase adentro? artoo que se está inicializando?¿Por qué no hay new?Donde hace :keyboard ¿viene de?Si existe una sintaxis alternativa que represente las relaciones de manera más explícita, ¿podría mostrarla también?

¿Fue útil?

Solución

Esta es una gran pregunta.Puede que sea un duplicado, pero no pude encontrar ninguno y este es el tipo de cosas que resultan complicadas para los programadores inteligentes que son nuevos en Ruby.

Primero, a tu pregunta:Qué es connection?

Es un llamada al método.En algunos casos puede resultar difícil saber qué es un método y qué es una variable, porque sólo depende de cómo se definieron.Pero en este caso está claro porque connection tiene parámetros después de él.En Ruby, un método se puede llamar así:

foo

En ese caso es un método que no toma parámetros.O puede verse así:

foo 1, 2, 3

Ese es un método con tres parámetros.O puede verse así:

foo(1, 2, 3)

Ese es el mismo método, pero con una sintaxis ligeramente diferente (que es más familiar para las personas con experiencia en lenguajes que imitan c como c, C++, Java, Javascript, C#, etc.)

Entonces, cuando vea parámetros listados después de una palabra simple, sin operadores entre ellos, es una señal segura de que es una llamada a un método.

Ahora para desglosar su código por completo.

require 'artoo'

Esto es técnicamente una llamada a un método.Estás llamando al require método y pasando un único parámetro de la cadena literal 'artoo'.Como probablemente sabes, require carga un archivo Ruby externo en el archivo actual.

connection :keyboard, adaptor: :keyboard

Esta es una llamada a un método con algunos azúcar sintáctica:

Sabes de inmediato que connection es una llamada a un método porque tiene parámetros después (es decir,ningún operador entre connection y lo que viene después).¿Pero qué parámetros?

:keyboard:es un Símbolo, que es el equivalente de Ruby a un cadena interna.

adaptor: :keyboard es un Picadillo.

Ruby tiene dos sintaxis hash principales:

{key => value}

Dónde key y value son cualquier objeto, o:

{key: value}

Dónde key es un simple símbolo literal y value es cualquier objeto.Además, para mantener el código limpio, cuando pasas un Hash como último parámetro a un método, puede omitir el { y } porque es inequívoco.Termina brindándole una llamada de método limpia de estilo "parámetro con nombre":

do_something_to my_person, kindness: 10, aggressiveness: 2

En tu código:

connection :keyboard, adaptor: :keyboard

Tiene la sintaxis hash alternativa (claves de símbolos) con la { y } Parado.Toda la línea es 100% equivalente a:

connection(:keyboard, {:adaptor => :keyboard})

Tu última línea:

device :keyboard, driver: :keyboard, connection: :keyboard

Es lo mismo.Equivalente a:

device(:keyboard, {:driver => :keyboard, :connection => :keyboard})

Simplemente se ve mejor (una vez que te acostumbras).

Otros consejos

En su ejemplo, connection y device son métodos.El código adapter: :keyboard, driver: :keyboard y :connection: :keyboard bits son parámetros que se pasan como un hash a esos métodos.Los primeros parámetros pasados a la conexión () y el dispositivo () no se pasan en un hash.

El mismo código podría reescribirse así:

connection :keyboard, { adaptor => :keyboard }
device :keyboard, { driver => :keyboard, connection => :keyboard }

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top