2014-09-12 15 views
13

Ho una funzione denominata or ad esempio, che è definita come;Passaggio di elementi di un elenco come parametri a una funzione con argomenti variabili

or(filters: FilterDefinition*) 

E poi ho una lista:

List(X, Y, Z) 

Quello che ora dobbiamo fare è chiamata or come

or(func(X), func(Y), func(Z)) 

E come previsto la lunghezza della lista potrebbe cambiare.

Qual è il modo migliore per farlo in Scala?

+3

Non esattamente la stessa domanda, ma fornisce la notazione ': _ *' che è la chiave della risposta (assumendo che tu possa semplicemente 'list.map (func)'!): Http://stackoverflow.com/questions/ 1008783 –

+0

Se passiamo gli interi elementi della lista e li elaboriamo tutti nella funzione chiamata zione, quindi può anche essere fatto semplicemente passando l'elenco alla funzione e la funzione può iterare attraverso gli elementi, senza la necessità di una sintassi speciale di: _ *, giusto? O potrei sbagliarmi, c'è qualche buona ragione per questo utilizzo? – user3366706

+0

@ user3366706 sarebbe l'approccio più tradizionale per fare le cose, sì. Per me è stato incredibilmente utile quando si trattava di un DSL che prevedeva una query generata come argomento della funzione, con un numero variabile di argomenti. – Ashesh

risposta

32

Date un'occhiata a questo esempio, voglio definire una funzione PrintMe che prende vargs di tipo String

def printme(s: String*) = s.foreach(println) 


scala> printme(List("a","b","c")) 

<console>:9: error: type mismatch; 
found : List[String] 
required: String 
       printme(List(a,b,c)) 

Che cosa si ha realmente bisogno di un-imballare la lista in argomenti con l':_* operatore

scala> val mylist = List("1","2","3") 
scala> printme(mylist:_*) 
1 
2 
3 
+0

Funziona anche con la classe: 'case class ExampleClass (d: Double *)' –

Problemi correlati