5

このコードは、a から z までの範囲の配列を作成するようですが、何をするのかわかりません*。誰か説明してくれませんか?

[*"a".."z"]
4

3 に答える 3

12

スプラット演算子と呼ばれます。

左辺値のスプラッティング

最大 1 つの左辺値をスプラッティングできます。その場合、対応する左辺値がない残りの右辺値で構成される配列が割り当てられます。右端の左辺値が分割されている場合、左辺値とまだペアになっていないすべての右辺値を消費します。分割された左辺値の後に他の左辺値が続く場合、次の左辺値が右辺値を受け取ることを許可しながら、可能な限り多くの右辺値を消費します。

*a = 1
a #=> [1]

a, *b = 1, 2, 3, 4
a #=> 1
b #=> [2, 3, 4]

a, *b, c = 1, 2, 3, 4
a #=> 1
b #=> [2, 3]
c #=> 4

空のスプラット

左辺値は、関連付けられた識別子のない単一のアスタリスク (U+002A) で構成される場合があります。上記のように動作しますが、対応する右辺値を分割された左辺値に割り当てる代わりに、それらを破棄します。

a, *, b = *(1..5)
a #=> 1
b #=> 5

右辺値のスプラッティング

右辺値が分割されると、Kernel.Array() を使用して配列に変換され、その要素はそれ自体で右辺値になります。

a, b = *1
a #=> 1
b #=> nil

a, b = *[1, 2]
a #=> 1
b #=> 2

a, b, c = *(1..2), 3
a #=> 1
b #=> 2
c #=> 3
于 2010-10-27T08:16:41.873 に答える
0

うーん、楽しい事実。これを行う場合:

*(0..50)

エラーが発生します。

この場合、splat オペレーターは、動作するためにレシーバーを必要とします。したがって、受信機なしで試すだけで、irb が壊れていると思わないでください。

于 2012-09-26T03:54:20.133 に答える
0

splat 演算子は、範囲を配列に展開します。

于 2010-10-27T08:23:48.873 に答える