Вопрос

Я ищу объяснение тому, что происходит в верхней части artoo.io роботы.В верхней части этого примера есть объявление, использующее драйвер клавиатуры:

require 'artoo'

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

Кажется, что отображается какой-то сокращенный / альтернативный синтаксис, и я хотел бы получить объяснение этого сокращения.Я понимаю альтернативный синтаксис хэша: :adapter => :keyboard.

Что происходит в этих последних двух строках кода выше?Что такое connection?Это класс внутри artoo это инициализируется?Почему здесь нет new?Где находится :keyboard откуда взялся?Если есть альтернативный синтаксис, который представляет отношения более явно, не могли бы вы показать и это?

Это было полезно?

Решение

Это отличный вопрос.Возможно, это дубликат, но я не смог его найти, а это как раз то, что сложно сделать умным программистам, новичкам в Ruby.

Во-первых, к вашему вопросу:Что такое connection?

Это вызов метода.В некоторых случаях может быть трудно определить, что такое метод, а что - переменная, потому что это просто зависит от того, как они были определены.Но в данном случае это понятно, потому что connection имеет параметры после него.В ruby метод может быть вызван следующим образом:

foo

В таком случае это метод, который не принимает параметров.Или это может выглядеть примерно так:

foo 1, 2, 3

Это метод с тремя параметрами.Или это может выглядеть примерно так:

foo(1, 2, 3)

Это тот же метод, но с немного другим синтаксисом (который более знаком людям, работающим на языках, имитирующих c, таких как c, C ++, Java, Javascript, C # и т.д.)

Поэтому, когда вы видите параметры, перечисленные после простого слова, без каких-либо операторов между ними, это верный признак того, что это вызов метода.

Теперь полностью разберем ваш код.

require 'artoo'

Технически это вызов метода.Ты звонишь в require метод и передача единственного параметра литеральной строки 'artoo'.Как вы, наверное, знаете, require загружает внешний файл ruby в текущий файл.

connection :keyboard, adaptor: :keyboard

Это вызов метода с некоторыми синтаксический сахар:

Вы сразу понимаете, что connection является вызовом метода, потому что после него есть параметры (т. е.нет оператора между connection и то, что будет после).Но какие параметры?

:keyboard:является Символ, что является эквивалентом ruby для строка стажера.

adaptor: :keyboard является Хэш.

Ruby имеет два основных синтаксиса хэша:

{key => value}

Где key и value являются ли какие-либо объекты, или:

{key: value}

Где key является простым буквальным Символом и value является любым объектом.Кроме того, чтобы сохранить код чистым, когда вы передаете хэш в качестве Последние параметр для метода, вы можете оставить без внимания { и } потому что это недвусмысленно.В конечном итоге это приводит к чистому вызову метода в стиле "именованный параметр":

do_something_to my_person, kindness: 10, aggressiveness: 2

В вашем коде:

connection :keyboard, adaptor: :keyboard

У вас есть альтернативный синтаксис хэша (символьные ключи) с { и } остановлено.Вся линейка на 100% эквивалентна:

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

Твоя последняя реплика:

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

Это одно и то же.Эквивалентно:

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

Это просто выглядит приятнее (как только вы к этому привыкнете).

Другие советы

В вашем примере генеракодицетагкод и генеракодицетагкод являются методами.Генеракодицетагкод, регенеракодицетагкод и биты connection являются параметрами, передаваемыми в качестве хеша к этим методам.Первые параметры, переданные для подключения () и устройства (), не передаются в хэш.

Один и тот же код может быть переписан так:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top