2012-01-09 8 views
6

Sono un po 'nuovo a Groovy, quindi sono sicuro che questa è una di quelle cose estremamente ovvie ... ma è difficile cercare tramite Google.Gli asterischi davanti ai nomi degli array in Groovy?

In altri linguaggi, gli asterischi tendono a rappresentare i puntatori. Tuttavia, in questo snippet di codice Groovy:

byte[] combineArrays(foo, bar, int start) { 
    [*foo[0..<start], *bar, *foo[start..<foo.size()]] 
} 

Posso solo immaginare che non è il caso. Voglio dire, puntatori? Groovy?

Suppongo che questo codice intende passare i membri di foo e bar rispetto a un array multidimensionale. Quindi cosa significano esattamente gli asterischi?

Grazie mille per il vostro aiuto.

+1

Corretto; appiattisce la collezione. Anche se non c'è passaggio qui, li appiattisce semplicemente nella nuova collezione. Ma non essere risucchiato a pensare cose in "" [] "' sono array, perché non lo sono. –

+0

(Non dovrei dire spianare, poiché è qualcosa di diverso - disunisce una collezione trasformandola in elementi individuali. Lo assegna. –

+1

Mr Haki (come al solito) [ha l'operatore di spread coperto] (http: // mrhaki .blogspot.com/2009/09/groovy-goodness-spread-operator.html) con alcuni esempi –

risposta

10

Se utilizzato in questo modo, l'operatore * distribuisce un elenco o una matrice in un elenco di argomenti. Questo non ha aiutato affatto, vero? Che ne dici di un esempio? Supponiamo di avere questa funzione:

def add(Number a, Number b) { 
    return a + b 
} 

e questo elenco

def args = [1, 2] 

Ovviamente non possiamo fare questo:

add(args) 

perché la funzione si aspetta due argomenti numerici. Ma possiamo fare questo:

add(*args) 

perché l'operatore * converte la Lista di 2 elementi in 2 argomenti. È possibile utilizzare questo operatore con elenchi e array. Ho lavorato con Groovy per oltre due anni e posso solo ricordare di usare questo operatore una volta.

+0

Groovy distribuirà automaticamente gli argomenti, quindi funziona anche il primo esempio: – ataylor

+2

@taylor è vero, ma è una caratteristica orribile di la lingua IMO, ed è programmata per la rimozione in Groovy 2.0 (quindi non dovrebbe essere incoraggiato) –

Problemi correlati