これは素晴らしい質問です。重複している可能性がありますが、見つけることができませんでした。これは、Ruby を初めて使用する賢いプログラマーにとっては難しいことです。
まず、あなたの質問に: とは何connectionですか?
メソッド呼び出しです。場合によっては、何がメソッドで何が変数かを見分けるのが難しいことがあります。これは、それらがどのように定義されたかに依存するためです。ただし、この場合、connectionその後にパラメーターがあるため、明確です。Ruby では、メソッドは次のように呼び出すことができます。
foo
その場合は、パラメーターを取らないメソッドです。または、次のようになります。
foo 1, 2, 3
これは、3 つのパラメーターを持つメソッドです。または、次のようになります。
foo(1, 2, 3)
これは同じ方法ですが、構文が少し異なります (これは、c、C++、Java、Javascript、C# などの c 模倣言語での経験により馴染みのあるものです)。
したがって、パラメーターが単純な単語の後にリストされていて、その間に演算子がない場合は、それがメソッド呼び出しであることを示しています。
次に、コードを完全に分解します。
require 'artoo'
これは技術的にはメソッド呼び出しです。メソッドを呼び出してrequire、リテラル文字列の 1 つのパラメーターを渡します'artoo'。ご存じのとおりrequire、外部の ruby ファイルを現在のファイルに読み込みます。
connection :keyboard, adaptor: :keyboard
これは、いくつかのシンタックス シュガーを使用したメソッド呼び出しです。
connection後にパラメーターがあるため (つまり、 と の間に演算子がない)、これがメソッド呼び出しであることがすぐにわかりますconnection。しかし、どのパラメータですか?
:keyboard: はSymbolであり、Ruby ではインターンされた文字列に相当します。
adaptor: :keyboardハッシュです。
Ruby には 2 つの主要なハッシュ構文があります。
{key => value}
keyとは任意valueのオブジェクト、または:
{key: value}
keyはそのままのリテラル Symbol でありvalue、任意のオブジェクトです。また、コードをクリーンに保つために、メソッドの最後のパラメーターとして Hash を渡す場合、 {andを省略でき}ます。最終的には、クリーンな「名前付きパラメーター」スタイルのメソッド呼び出しが得られます。
do_something_to my_person, kindness: 10, aggressiveness: 2
あなたのコードで:
connection :keyboard, adaptor: :keyboard
and を省略した代替ハッシュ構文 (シンボル キー) があり{ます}。行全体は、以下と 100% 同等です。
connection(:keyboard, {:adaptor => :keyboard})
あなたの最後の行:
device :keyboard, driver: :keyboard, connection: :keyboard
同じことです。に相当:
device(:keyboard, {:driver => :keyboard, :connection => :keyboard})
見栄えが良くなります(慣れれば)。