У меня есть фрагмент кода, который я не могу заставить вести себя так, как мне хотелось бы. У меня есть класс, определенный следующим образом (урезанный для этого):
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)