Тип аргумента закрытия с несколькими параметрами не определен

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

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)
9
задан seadowg 2 February 2012 в 18:59
поделиться