Tengo un código que no puedo comportarme de la manera que me gustaría. Tengo una clase definida de la siguiente manera (simplificada para esto):Tipo de argumento de cierre de parámetro múltiple no deducido
class Behaviour[T](private val rule: Time => T) {
def map1[U, V](behaviour: Behaviour[U], func: (T, U) => V): Behaviour[V] = {
new Behaviour(time => func(this.at(time), behaviour.at(time)))
}
}
Cuando se juega un poco con esta clase intenté algo que pensé que sería trivial:
val beh = Behaviour(time => 5)
val beh2 = Behaviour(time => 5)
beh.map1(beh2, (a, b) => a + b)
Para el último línea de recibo el siguiente error:
<console>:13: error: missing parameter type
beh.map1(beh2, (a, b) => a + b)
^
puedo, por supuesto, especificar los tipos de parámetros de cierre y funciona correctamente, pero por qué no escribe trabajo inferencia aquí? Por supuesto, también podría especificar los tipos genéricos para la función (ver a continuación ambas soluciones).
Pensé que Scala llevó a cabo un 'escaneo' para inferir tipos y vería beh2
y pasó a la función y supone U
aquí para que sea Int
. ¿Hay alguna manera de solucionarlo sin especificar los tipos de los parámetros de entrada (para el cierre o los genéricos)?
EDIT: Ejemplos de las dos correcciones que tengo:
beh.map1[Int, Int](beh2, (a, b) => a + b)
beh.map1(beh2, (a, b : Int) => a + b)
¡Muchas gracias que funciona muy bien! Aceptaré la respuesta si ninguno puede venir con una explicación de lo que está sucediendo en el día siguiente. – seadowg