5

次のコードを実行します。

a = [1, 2, 3, 4, 5]
head, *tail = a
p head
p tail

結果が得られます

1
[2, 3, 4, 5]

誰が私に声明を説明するのを手伝ってくれるでしょうhead,*tail = a、ありがとう!

4

3 に答える 3

16

head, *tail = aは、配列の最初の要素を に割り当て、残りの要素を に割り当てることを意味aheadますtail

*は、「splat 演算子」とも呼ばれ、配列に対してさまざまな処理を行います。あなたの例のように、代入演算子()の左側にある=場合、それは単に「残ったものをすべて取る」ことを意味します。

そのコードで感嘆符を省略した場合、代わりに次のようになります。

head, tail = [1, 2, 3, 4, 5]
p head # => 1
p tail # => 2

しかし、感嘆符を追加すると、 「前の変数 ( ) に割り当てtailられなかったすべてのものを に割り当てる」という意味になります。headtail

于 2010-09-01T13:49:07.910 に答える
8

まず、並行課題です。ルビーで書くことができます

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]
于 2010-09-01T13:57:08.610 に答える
0

私は Ruby についてまったく知りませんが、私の推測では、このステートメントはリストaを先頭 (最初の要素) と残り (別のリスト) に分割し、新しい値を変数headおよびtail.

このメカニズムは通常 (少なくとも Erlang では)パターン マッチングと呼ばれます。

于 2010-09-01T13:50:19.013 に答える