我有以下方法:
override def insertAll(notifications: Seq[PushNotificationEncoded])
(implicit ec: ExecutionContext): Future[Unit] = {
val f = Future.sequence(notifications.map(insert)).map(_ => Unit)
f.onFailure { case ex => sys.error(s"Got exception whilst saving PushNotification: $ex") }
f
}
Run Code Online (Sandbox Code Playgroud)
它给出了以下编译器错误:
type mismatch;
found : scala.concurrent.Future[Unit.type]
required: scala.concurrent.Future[Unit]
f
^
Run Code Online (Sandbox Code Playgroud)
我认为Unit是一个带有单个元素的类型,因此在Unit中不应该有任何混淆.我尝试使用Google搜索,但我找不到有关"Unit.type"的更多信息.
如果我简化这样的方法,那么它工作正常:
override def insertAll(notifications: Seq[PushNotificationEncoded])
(implicit ec: ExecutionContext): Future[Unit] =
Future.sequence(notifications.map(insert)).map(_ => Unit)
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
单位唯一的例子是(). Unit用作值是Unit的伴侣对象(主要管理装箱和拆箱)
val f = Future.sequence(notifications.map(insert)).map(_ => ())
Run Code Online (Sandbox Code Playgroud)