我有以下方法:
它会产生以下编译器错误:
这里发生了什么事情?
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
}
它会产生以下编译器错误:
type mismatch;
found : scala.concurrent.Future[Unit.type]
required: scala.concurrent.Future[Unit]
f
^
我认为Unit是一个只有一个元素的类型,因此在处理Unit时不应该有任何混淆。我尝试通过谷歌搜索来了解更多关于"Unit.type"的信息,但是没有找到太多有用的内容。
如果我像这样简化方法,那么它可以正常工作:
override def insertAll(notifications: Seq[PushNotificationEncoded])
(implicit ec: ExecutionContext): Future[Unit] =
Future.sequence(notifications.map(insert)).map(_ => Unit)
这里发生了什么事情?
Unit.type
实例的Unit
不是类型Unit
,而是它的伴生对象,正如Ramsey的回答所说(它们之间的关系在Scala中相当弱)。 - Alexey Romanov