Dieser Code scheint ein Array mit einem Bereich von a bis z zu erstellen, aber ich verstehe nicht, was die *
tut. Kann mir bitte jemand erklären?Was macht ein * vor einem String-Literal in Ruby?
[*"a".."z"]
Dieser Code scheint ein Array mit einem Bereich von a bis z zu erstellen, aber ich verstehe nicht, was die *
tut. Kann mir bitte jemand erklären?Was macht ein * vor einem String-Literal in Ruby?
[*"a".."z"]
Es heißt splat operator.
Splatting einen L-Wert
Maximal einen L-Wert kann es ein Array in welchem Fall splatted werden, die aus dem verbleibenden rvalues zugeordnet ist, die entsprechenden L-Werte fehlen. Wenn der rechte Lvalue gesprenkelt ist, verbraucht er alle R-Werte, die noch nicht mit L-Werten gepaart wurden. Wenn auf einen gesprenkelten L-Wert andere L-Werte folgen, werden so viele R-Werte wie möglich verbraucht, während die folgenden L-Werte weiterhin ihre R-Werte erhalten können.
*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
Leer Splat
ein L-Wert eines Sohlen Sternchen (U + 002A) ohne zugeordnete Kennung bestehen. Es verhält sich wie oben beschrieben, aber anstatt die entsprechenden rvalues dem gespritzten Lvalue zuzuweisen, werden sie verworfen.
a, *, b = *(1..5) a #=> 1 b #=> 5
rvalue Splatting
Wenn ein rvalue splatted wird es auf ein Array mit Kernel.Array() umgewandelt wird, werden die Elemente, aus denen rvalues in ihrem eigenen Recht.
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
Neben der Zuweisung von Werten können Sie auch den splat-Operator verwenden, um Methoden zu definieren: 'def do_it (arg1, * args)'. Jetzt können Sie 'do_it (1, 2)' und 'do_it (1, 2, 3, 4)' aufrufen. – Ariejan
Der Splat-Operator erweitert die Palette in einem Array.
In einigen Fällen * trifft dies zu. :) –
Huh, lustige Tatsache. Wenn Sie dies tun:
*(0..50)
erhalten Sie einen Fehler.
Der Splat-Operator benötigt in diesem Fall einen Empfänger, um zu arbeiten. Also täusche dich nicht, wenn du es ohne einen Empfänger ausprobierst.
In diesem Fall befindet es sich nicht vor einem Zeichenfolgenliteral, sondern vor einem Bereich. –