1

artoo.ioロボットの上部で何が起こっているかについての説明を探しています。この例の先頭には、キーボード ドライバーを使用した宣言があります。

require 'artoo'

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

省略形/代替構文が表示されているようですが、その省略形の説明が欲しいです。代替ハッシュ構文を理解しています: :adapter => :keyboard.

上記の最後の 2 行のコードでは何が行われているのでしょうか? とはconnection? artoo初期化されているのは内部のクラスですか?なぜないのnewですか?どこ:keyboardから来たの?関係をより明示的に表す代替構文がある場合は、それも示していただけますか?

4

2 に答える 2

7

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

見栄えが良くなります(慣れれば)。

于 2014-06-03T15:27:20.640 に答える
2

あなたの例では、connectiondeviceはメソッドです。、およびビットはadapter: :keyboard、これらのメソッドにハッシュとして渡されるパラメーターです。connection() および device() に渡される最初のパラメーターは、ハッシュで渡されません。driver: :keyboard:connection: :keyboard

同じコードを次のように書き直すことができます。

connection :keyboard, { adaptor => :keyboard }
device :keyboard, { driver => :keyboard, connection => :keyboard }
于 2014-06-03T15:29:55.110 に答える