2014-11-24 11 views
7
def adder(a:Int,b:Int):Int = {a+b} 
def doubler(a:Int):Int = {a*2} 
def doubleAdd = doubler _ compose adder 

ottengo l'errore: tipo non corrispondente trovato: (Int, Int) => Int richiesta:? => IntScala, Composizione Funzione con due valori

Quindi se provo solo doubleAdd = doubler (adder _) ottengo lo stesso errore tranne Int richiesto invece di? => Int

C'è un modo per comporre una funzione con due parametri? Scusate se questo è piuttosto semplice, sono abbastanza nuovo per la lingua, e non ho potuto trovare un esempio con due parametri ovunque.

risposta

6

Si sta tentando di comporre una Function2 (adder) con una Function1, quindi il problema. Una soluzione è quella di modificare la definizione di Adder a una versione al curry:

def adder(a: Int)(b: Int):Int = a + b 

Poi doubleAdd per applicare parzialmente vipera in questo modo:

def doubleAdd(x: Int) = doubler _ compose adder(x) 

Quello che sta succedendo sotto il cofano sta trasformando vipera da un Function2 (Int, Int) => Int, a a o una funzione che restituisce una funzione. Sarai quindi in grado di comporre la funzione restituita da adder con il primo parametro già applicato.

+0

Grazie, questo mi ha aiutato molto – Jim

Problemi correlati