Почему это SCALA код компилируется, Сигнатура восстанавливаемого,оправиться от Exception, SCALA будущего
def recover[U >: T](pf: PartialFunction[Throwable, U])(implicit executor: ExecutionContext): Future[U]
то почему ниже кода компиляции. Вы можете видеть, что recover
в приведенном ниже коде не возвращает Единицу.
object TestRecover {
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
def failingFunction(input: Seq[String]): Future[Unit] = {
Future {
if (input.isEmpty) throw new Exception("Cannot be empty")
else()
}
}
def callFailingFunc(input: Seq[String]): Future[Unit] = {
failingFunction(input).recover {
case _ =>
//Not returning Unit here, but Future[Unit]. Shouldn't type checker fail this ?
callFailingFunc(input.reverse)
}
}
}
Await.result(TestRecover.callFailingFunc(Seq()), 20.seconds)
Кроме того, почему не производит StackOverflow из-за бесконечной рекурсии?