2012-09-25 7 views
23

Ich bin gerade nass mit Gremlin nass meine Füße. Ich verstehe, dass Gremlin auf groovy basiert. Ich habe die Dokumentation gefunden here, aber ich bin mir immer noch nicht sicher, was die Syntax bedeutet.groovige Art mit Komparator-Syntax

Ich bin ein bisschen verwirrt, wie die Syntax der Art mit einem Komparator arbeitet:

m.sort{a,b -> a.value <=> b.value} 

Könnte jemand erklären, was die alle verschiedenen Bits zwischen dem { und } bedeuten?

Antwort

40

Wenn die Closure von sort zwei Parameter verwendet, handelt es sich um eine traditionelle . Das heißt, für jeden Vergleich, der während der Sortierung zwischen den beiden Elementen a und b ausgeführt wird, gibt eine negative Ganzzahl, Null oder eine positive ganze Zahl zurück, wenn das erste Argument kleiner, gleich oder größer als das zweite ist .

In Ihrem speziellen Szenario ist der Vergleich das Ergebnis der Verwendung der spaceship operator<=>. Mit anderen Worten sortieren Sie effektiv Ihre Elemente in aufsteigender Ordnung.

Zum Beispiel, wenn Sie die Liste hatten [ 3, 2, 1 ], das Ergebnis der Verwendung dieser Art would be[ 1, 2, 3 ].

Somit ist m.sort{a,b -> a.value <=> b.value}grob das Äquivalent unter Verwendung der folgenden Funktion compare:

int compare(a, b) { 
    if (a < b) { 
    return -1; 
    } else if (a > b) { 
    return 1; 
    } else { 
    return 0; 
    } 
} 
+0

Also, die 'a, b Überlastung ->', einfach übergibt die Werte 'a' und 'b' an den Komparator? – F21

+0

@ F21: Ja, irgendwie. Es ist wie eine Funktion, die zwei Parameter benötigt und nach dem Funktionskörper sortiert wird, der den Raumschiffoperator zurückgibt. –

+0

Tolle Erklärung! Prost :) – F21

4

Das Raumschiff Operator <=> ist ein überladener Operator und stellt compareTo(). Grundsätzlich ist a<=>b dasselbe wie a.compareTo(b)

Das Beispiel, das Sie gaben, verwendet die sort() Funktion mit einer Schließung (wie Lambda in Java8). Die Syntax dafür ist die folgende:

beträgt.Verfahren {closureParameters ->statements}

So Ihr Beispiel wird unter Verwendung der sort() Funktion mit einem closure, innerhalb dieser Schließung Sie das Raumschiff (Komparator) verwenden Betreiber

Mehr über Betreiber here