Was bedeutet die Syntax [* a..b] in Ruby?

8

HINWEIS: Mischas Splat auf GitHub enthält viele coole interaktive Beispiele für * in Aktion.

Beim googeln habe ich eine Möglichkeit gefunden, über einen Zahlenbereich in Ruby (Ihrer klassischen C-style for-Schleife) zu iterieren.

%Vor%

soll so etwas tun

%Vor%

Aber was genau macht diese [*first..last] Syntax? Ich spielte mit irb herum und ich sehe das:

%Vor%

Alles, was ich online gelesen habe, behandelt das unäre Sternchen als nützlich für das Erweitern und Reduzieren von Argumenten, die an eine Methode übergeben werden, nützlich für Argumentlisten mit variabler Länge

%Vor%

und ich verstehe das, aber ich sehe nicht, wie es auf die Erweiterung angewendet wird, die in meinem Blockbeispiel oben ausgeführt wird.

Um klar zu sein, weiß ich, dass der Ruby Way über ein Array oder eine Collection iterieren soll, nicht um die Array-Länge zu verwenden und mit einem Integer-Index zu iterieren. In diesem Beispiel beschäftige ich mich jedoch wirklich mit einer Liste von ganzen Zahlen. :)

    
Justin Force 12.05.2011, 17:12
quelle

3 Antworten

12
%Vor%

ist dasselbe wie

%Vor%

Instanzen der Klasse Array , die Sie erstellt haben, implementieren Enumerable , damit Ihre Schleife funktioniert. Bei Klassen, die eine Methode to_a definieren, können Sie die Syntax splat-Operator mit Klammern verwenden. Splat kann viel mehr als nur #to_a aufrufen und wäre allein eine Google-Suche wert.

Nun, in Ihrem Fall ist die Range -Klasse selbst bereits und Enumerable , also könnten Sie einfach tun:

%Vor%     
DigitalRoss 12.05.2011, 17:21
quelle
3

[first..last] ist ein Array, das nur 1 Bereichsobjekt enthält. [*first..last] ist ein Array, das die Elemente dieses Bereichs als Argumentliste enthält. * arbeitet im Kontext einer Argumentliste.

    
seph 12.05.2011 17:24
quelle
3

Es wird ein Splat-Operator genannt. Wenn Sie es innerhalb bestimmter Positionen wie einer Argumentposition oder einem Array verwenden, wird es in seine Elemente expandieren:

%Vor%

Sie können es nicht nackt oder in Bereichen verwenden:

%Vor%

Wenn Sie etwas haben, das kein Array ist, gibt es sich selbst zurück:

%Vor%     
sawa 12.05.2011 17:20
quelle

Tags und Links