Pergunta

Eu estou procurando uma explicação para o que está acontecendo no topo da artoo.io robôs.Há uma declaração na parte superior deste exemplo usando o driver de teclado:

require 'artoo'

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

Parece que alguns abreviada/sintaxe alternativa é apresentada, e gostaria de uma explicação de que forma abreviada.Eu entendo a alternativa hash sintaxe: :adapter => :keyboard.

O que está acontecendo nessas duas últimas linhas de código acima?O que é connection?É uma classe dentro artoo que está sendo inicializado?Por que não há new?Onde é que :keyboard vem?Se há uma sintaxe alternativa que representa as relações de forma mais explícita, pode mostrar que o bem?

Foi útil?

Solução

Esta é uma grande questão.Ele pode ser duplicado, mas eu não conseguia encontrar um e este é o tipo de coisa que é complicado para smart programadores que são novos para o Ruby.

Primeiro, à sua pergunta:O que é connection?

É um chamada de método.Em alguns casos, pode ser difícil dizer o que é um método e o que é uma variável, porque isso só depende de como elas foram definidas.Mas, neste caso, é claro, porque connection tem parâmetros após ele.No ruby, um método pode ser chamado assim:

foo

Neste caso, é um método que leva sem parâmetros.Ou ele pode ter esta aparência:

foo 1, 2, 3

Que é um método com três parâmetros.Ou ele pode ter esta aparência:

foo(1, 2, 3)

Que é o mesmo método, mas com uma sintaxe ligeiramente diferente (o que é mais familiar para as pessoas experiências em c-mimicing linguagens como c, C++, Java, Javascript, C#, etc...)

Então, quando você vê os parâmetros listados após uma simples palavra, sem operadores entre, é um sinal certo de que é uma chamada de método.

Agora, para quebrar seu código completo.

require 'artoo'

Este é, tecnicamente, uma chamada de método.O que você está chamando o require método e passar um único parâmetro de seqüência de caracteres literal 'artoo'.Como você provavelmente sabe, require cargas externas ruby ficheiro para o ficheiro actual.

connection :keyboard, adaptor: :keyboard

Esta é uma chamada de método com alguns um açúcar sintático:

Você sabe imediatamente que connection é uma chamada de método, porque tem os parâmetros a seguir (i.e.nenhum operador entre connection e o que vem depois).Mas que parâmetros?

:keyboard:é um Símbolo, o que é ruby equivalente a de um estagiário gostaria de seqüência de caracteres.

adaptor: :keyboard é um Hash.

O Ruby tem dois principais hash sintaxes:

{key => value}

Onde key e value são objetos, ou:

{key: value}

Onde key é um simples Símbolo literal e value é qualquer objeto.Além disso, para manter o código limpo, quando você passar um Hash como o última parâmetro para um método, você pode deixar de fora o { e } porque é inequívoca.Ele acaba lhe dando um limpa "chamado" parâmetro de estilo chamada de método:

do_something_to my_person, kindness: 10, aggressiveness: 2

No seu código:

connection :keyboard, adaptor: :keyboard

Você tem a alternativa de hash sintaxe (símbolo chaves) com o { e } parou.Toda a linha é 100% equivalente a:

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

Sua última linha:

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

É a mesma coisa.Equivalente a:

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

Ele só parece melhor (uma vez que você se acostumar a ele).

Outras dicas

No seu exemplo, connection e device são métodos.O adapter: :keyboard, driver: :keyboard e :connection: :keyboard bits são parâmetros passados como um hash para esses métodos.A primeira parâmetros passados para conexão() e dispositivo() não estão sendo passados em um hash.

O mesmo código pode ser reescrita assim:

connection :keyboard, { adaptor => :keyboard }
device :keyboard, { driver => :keyboard, connection => :keyboard }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top