次のコードを実行します。
a = [1, 2, 3, 4, 5]
head, *tail = a
p head
p tail
結果が得られます
1
[2, 3, 4, 5]
誰が私に声明を説明するのを手伝ってくれるでしょうhead,*tail = a
、ありがとう!
head, *tail = a
は、配列の最初の要素を に割り当て、残りの要素を に割り当てることを意味a
しhead
ますtail
。
*
は、「splat 演算子」とも呼ばれ、配列に対してさまざまな処理を行います。あなたの例のように、代入演算子()の左側にある=
場合、それは単に「残ったものをすべて取る」ことを意味します。
そのコードで感嘆符を省略した場合、代わりに次のようになります。
head, tail = [1, 2, 3, 4, 5]
p head # => 1
p tail # => 2
しかし、感嘆符を追加すると、 「前の変数 ( ) に割り当てtail
られなかったすべてのものを に割り当てる」という意味になります。head
tail
まず、並行課題です。ルビーで書くことができます
a,b = 1,2
a は 1 になり、b は 2 になります。
a,b = b,a
値を交換します(他の言語で必要な典型的な一時変数なしで)。
アスタリスク * はパック/アンパック演算子です。書き込み
a,b = [1,2,3]
1 を a に、2 を b に割り当てます。スターを使用すると、値 2、3 が配列にパックされ、b に割り当てられます。
a,*b = [1,2,3]
私は Ruby についてまったく知りませんが、私の推測では、このステートメントはリストa
を先頭 (最初の要素) と残り (別のリスト) に分割し、新しい値を変数head
およびtail
.
このメカニズムは通常 (少なくとも Erlang では)パターン マッチングと呼ばれます。