質問
artoo.io の上部に何が起こっているのかについての説明を探しています。ロボットキーボードドライバを使用してこの例の上部に宣言があります。
require 'artoo'
connection :keyboard, adaptor: :keyboard
device :keyboard, driver: :keyboard, connection: :keyboard
.
いくつかの短縮/代替構文が表示されているようです、そして私はその略数の説明を愛しています。代替ハッシュ構文::adapter => :keyboard
。
上記のコードの最後の2行のコードで何が起こっているのですか?connection
とは何ですか?初期化されているartoo
内のクラスですか?new
がないのはなぜですか?:keyboard
はどこから来たのですか?関係をより明確に表す代替構文がある場合は、それを示すことができますか?
解決
これは素晴らしい質問です。それは重複するかもしれませんが、私は1つを見つけることができませんでした、そしてこれはRubyに新しい賢いプログラマーにとって難しいことです。
最初の質問に:connection
とは何ですか?
それはメソッド呼び出しです。場合によっては、メソッドとは何ですか、変数とは何ですか。しかし、この場合、connection
はその後パラメータを持っているので明確です。 Rubyでは、方法は次のように呼び出すことができます:
foo
.
その場合、パラメータがない方法です。それともこのように見えることができます:
foo 1, 2, 3
.
それは3つのパラメータを持つメソッドです。それともこのように見えることができます:
foo(1, 2, 3)
.
それは同じ方法ですが、わずかに異なる構文で(C、C ++、Java、JavaScript、C#などのC模倣言語では、人々にとってよりよく知られています。)
SO裸語の後に表示されているパラメータが表示されたら、演算子がない場合は、それが確実な符号であることはメソッド呼び出しです。
今すぐあなたのコードを完全に壊す。
require 'artoo'
.
技術的にはメソッド呼び出しです。 require
メソッドを呼び出し、リテラル文字列'artoo'
の単一のパラメータを渡しています。おそらく知っているように、require
は外部のRubyファイルを現在のファイルにロードします。
connection :keyboard, adaptor: :keyboard
.
これは、いくつかの構文砂糖:
のメソッド呼び出しです。 connection
がメソッド呼び出しであることをわかります(connection
と後に起こるものの間の演算子はいません)。しかし、どのパラメータ?
:keyboard
:シンボルは、Rubyの Intern'D文字列。
{key => value}
.
です。
{key: value}
.
do_something_to my_person, kindness: 10, aggressiveness: 2
.
connection :keyboard, adaptor: :keyboard
.
{
と}
を除いて、代替ハッシュ構文(シンボルキー)を停止します。ライン全体は:
connection(:keyboard, {:adaptor => :keyboard})
.
device :keyboard, driver: :keyboard, connection: :keyboard
.
device(:keyboard, {:driver => :keyboard, :connection => :keyboard})
.
他のヒント
あなたの例では、connection
とdevice
はメソッドです。adapter: :keyboard
、driver: :keyboard
ビット、:connection: :keyboard
ビットは、それらの方法にハッシュとして渡されるパラメータです。connection()とdevice()に渡された最初のパラメータはハッシュに渡されていません。
同じコードはこのように書き換えることができます:
connection :keyboard, { adaptor => :keyboard }
device :keyboard, { driver => :keyboard, connection => :keyboard }
.