Frage

Ich suche nach einer Erklärung dafür, was oben vor sich geht artoo.io Roboter.Oben in diesem Beispiel befindet sich eine Deklaration mit dem Tastaturtreiber:

require 'artoo'

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

Es scheint, dass eine Kurzschrift / alternative Syntax angezeigt wird, und ich würde eine Erklärung dieser Kurzschrift lieben.Ich verstehe die alternative Hash-Syntax: :adapter => :keyboard.

Was ist in den letzten beiden Codezeilen oben los?Was ist connection?Ist es eine Klasse drinnen artoo das wird initialisiert?Warum gibt es keine new?Woher kommt :keyboard woher kommen?Wenn es eine alternative Syntax gibt, die die Beziehungen expliziter darstellt, könnten Sie das auch zeigen?

War es hilfreich?

Lösung

Das ist eine großartige Frage.Es könnte ein Duplikat sein, aber ich konnte keines finden, und das ist die Art von Dingen, die für kluge Programmierer, die neu in Ruby sind, schwierig sind.

Zuerst zu deiner Frage:Was ist connection?

Es ist ein Methodenaufruf.In einigen Fällen kann es schwierig sein zu sagen, was eine Methode und was eine Variable ist, weil es nur davon abhängt, wie sie definiert wurden.Aber in diesem Fall ist es klar, weil connection hat Parameter danach.In Ruby kann eine Methode wie folgt aufgerufen werden:

foo

In diesem Fall ist es eine Methode, die keine Parameter akzeptiert.Oder es kann so aussehen:

foo 1, 2, 3

Das ist eine Methode mit drei Parametern.Oder es kann so aussehen:

foo(1, 2, 3)

Das ist die gleiche Methode, aber mit einer etwas anderen Syntax (die den Menschen mit c-Nachahmungssprachen wie c, C ++, Java, Javascript, C # usw. vertrauter ist)...)

Wenn Sie also Parameter nach einem bloßen Wort ohne Operatoren dazwischen sehen, ist dies ein sicheres Zeichen dafür, dass es sich um einen Methodenaufruf handelt.

Jetzt brechen Sie Ihren Code vollständig auf.

require 'artoo'

Dies ist technisch ein Methodenaufruf.Du rufst die an require methode und Übergabe eines einzelnen Parameters der Literalzeichenfolge 'artoo'.Wie Sie wahrscheinlich wissen, require lädt eine externe Ruby-Datei in die aktuelle Datei.

connection :keyboard, adaptor: :keyboard

Dies ist ein Methodenaufruf mit einigen syntaktischer Zucker:

Das weißt du sofort connection ist ein Methodenaufruf, weil ihm Parameter nachgestellt sind (z.kein Operator zwischen connection und was danach kommt).Aber welche Parameter?

:keyboard:ist ein Symbol, was Rubys Äquivalent zu einem ist interner String.

adaptor: :keyboard ist ein Hash.

Ruby hat zwei primäre Hash-Syntaxen:

{key => value}

Wo key und value sind irgendwelche Gegenstände, oder:

{key: value}

Wo key ist ein bloßes wörtliches Symbol und value ist ein beliebiges Objekt.Auch, um Code sauber zu halten, wenn Sie einen Hash als übergeben letzt parameter zu einer Methode, können Sie die weglassen { und } weil es eindeutig ist.Es endet damit, dass Sie einen sauberen Methodenaufruf im Stil eines "benannten Parameters" erhalten:

do_something_to my_person, kindness: 10, aggressiveness: 2

In deinem Code:

connection :keyboard, adaptor: :keyboard

Sie haben die alternative Hash-Syntax (Symbolschlüssel) mit dem { und } aufgeh.Die gesamte Linie entspricht zu 100%:

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

Deine letzte Zeile:

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

Ist das Gleiche.Äquivalent zu:

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

Es sieht einfach schöner aus (sobald man sich daran gewöhnt hat).

Andere Tipps

In Ihrem Beispiel, connection und device sind Methoden.Der adapter: :keyboard, driver: :keyboard und :connection: :keyboard bits sind Parameter, die als Hash an diese Methoden übergeben werden.Die ersten an connection() und device() übergebenen Parameter werden nicht in einem Hash übergeben.

Der gleiche Code könnte so umgeschrieben werden:

connection :keyboard, { adaptor => :keyboard }
device :keyboard, { driver => :keyboard, connection => :keyboard }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top