У меня есть кусок кода, который я не могу вести себя так, как мне бы хотелось.У меня есть класс, определенный следующим образом (урезанный для этого):
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)))
}
}
Играя с этим классом, я пытался что-то, что я думал, было бы тривиальным:
val beh = Behaviour(time => 5)
val beh2 = Behaviour(time => 5)
beh.map1(beh2, (a, b) => a + b)
В последней строке я получаю следующую ошибку:
<console>:13: error: missing parameter type
beh.map1(beh2, (a, b) => a + b)
^
Конечно, я могу указать типы параметров замыкания, и они работают правильно, но почему здесь не работает вывод типов?Конечно, я мог бы также указать универсальные типы для функции (см. Ниже оба решения).
Я думал, что Scala выполнил 'сканирование', чтобы определить типы, и увидел бы beh2
и перешел в функцию и предположил, что U
здесь будет Int
.Можно ли как-то исправить это без указания типов входных параметров (для замыкания или обобщений)?
РЕДАКТИРОВАТЬ: Примеры двух исправлений, которые у меня есть:
beh.map1[Int, Int](beh2, (a, b) => a + b)
beh.map1(beh2, (a, b : Int) => a + b)