2012-09-15 6 views
40

penso che ho alcune aspettative divertenti ... voglio iterare i numeri da 1 a 10. Come un ciclo while va in questo modo:chiamando .each {} sul IntRange non restituisce l'intervallo di ogni intero

def countMe = 1 
while (countMe<11) { 
    println countMe 
    countMe++ 
} 

mi aspettavo che il seguente avrebbe fatto anche questo:

[1..10].each { println it } 

Ma in realtà la stampa IntRange, non ogni Integer nella gamma. Qual è il modo (sintatticamente) più vicino alla mia fantasia [x..y].each{} di ottenere ognuno di una lista di numeri?

risposta

79

Use parentheses not brackets:

(1..10).each{println it} 

[1..10] è una lista di lunghezza 1 contenente un singolo intervallo.

+3

È necessario ricordare [1..10] significa solo un intervallo quando è un indice DOPO un'altra variabile. Quando si trova da solo, allora è un ELENCO di una gamma. Queste piccole incoerenze sorgono perché Groovy cerca di estendere la sintassi di Java con le proprie aggiunte. –