2012-09-25 20 views
23

Solo me estoy mojando los pies con gremlin. Entiendo que gremlin se basa en groovy. Encontré la documentación here, pero aún no estoy seguro de lo que significa la sintaxis.tipo groovy con la sintaxis del comparador

estoy un poco confundido en cuanto a cómo funciona la sintaxis de género con un comparador:

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

Podría alguien explicar lo que todos los diferentes bits entre el { y } significan?

Respuesta

40

Cuando el Closure utilizado por sort tiene dos parámetros, actúa como un Comparator tradicional. Es decir, para cada comparación que se realiza durante la clasificación, entre dos elementos a y b, devuelve un entero negativo, cero o un entero positivo ya que el primer argumento es menor, igual o mayor que el segundo .

En su situación particular, la comparación es el resultado del uso del spaceship operator<=>. En otras palabras, está ordenando efectivamente sus elementos en orden ascendente. Por ejemplo, si tenía la lista [ 3, 2, 1 ], el resultado de usar ese género would be .

Por lo tanto, m.sort{a,b -> a.value <=> b.value} es aproximadamente el equivalente de utilizar el compare siguiente función:

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

Por lo tanto, el 'a, b ->', simplemente pasa los valores de 'a' 'B' y al comparador? – F21

+0

@ F21: Sí, más o menos. Es como una función que toma dos parámetros y se usa para ordenar de acuerdo con el cuerpo de la función que devuelve el operador de la nave espacial. –

+0

¡Gran explicación! Saludos :) – F21

4

El operador de la nave espacial <=> es un operador sobrecargado y representa compareTo(). Básicamente a<=>b es lo mismo que a.compareTo(b)

El ejemplo que usted dio está utilizando la función sort() con un cierre (como lambda en Java8). La sintaxis para ello es la siguiente:

.method {closureParameters ->statements}

Así que su ejemplo es utilizar la función sort() con un closure, en el interior que el cierre se utiliza la nave espacial (comparador) operador

Más acerca de la sobrecarga de operadores here

Cuestiones relacionadas