Cómo componer funciones parciales con múltiples parámetros en Scala
val f1 = (x: Int) => x match {
case x1 => x * 2
}
val f2 = (x: Int, y: Int) => (x, y) match {
case (x1, y1) => x1 + y1
}
val f3 = f1.compose(f2)
Esperando que f3 sea una función parcial de (Int, Int) => Int, pero obtengo el siguiente error
Encontrado: (f2: (Int, Int) => Int)
Requerido: Any => Int
davy.ai
El mensaje de error sugiere que el método
compose
está esperando una función de tipoAny => Int
en lugar de(Int, Int) => Int
. Esto se debe a que el métodocompose
espera una función que pueda tomar la salida de la función original como entrada. En este caso, la salida def2
es una tupla(x, y)
que no puede ser pasada como entrada af1
.Para hacer que
f3
sea una función parcial de(Int, Int) => Int
, podemos modificar la definición def1
para que tome una tupla como entrada en lugar de unInt
:En esta versión modificada de
f1
, hacemos un patrón de coincidencia en la tupla de entrada(x, y)
y calculamos la salida(x + y) * 2
. Esta salida luego puede ser pasada como entrada af2
a través def3
.