これは素晴らしい質問です。重複している可能性がありますが、見つけることができませんでした。これは、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})
見栄えが良くなります(慣れれば)。