【发布时间】:2021-08-15 13:00:04
【问题描述】:
使用期货时的一个常见问题是,当您期望Future[Unit] 时,即使Future[Future[Unit]] 也会被接受(例如,请参阅Why Shouldn’t You Use Future[Unit] as a Return Type in a Scala Program)。
我最近很惊讶Future.sequence(setOfFutures)在这种情况下不被接受:
import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global
val set = Set(Future(()))
def fuu: Future[Unit] = {
Future.sequence(set)
}
使用 Scala 2.12.13 我得到错误:
类型不匹配;
找到:scala.concurrent.Future[scala.collection.immutable.Set[Unit]]
使用 Scala 2.13 我得到:
无法基于 scala.collection.immutable.Set[scala.concurrent.Future[Unit]] 类型的集合构造具有 Unit 类型元素的 Unit 类型集合。
当我将函数的主体更改为:
val s = Future.sequence(set)
s
我得到了和以前一样的错误。
为什么Future[Future[Unit]] 被接受为Future[Unit] 而Future[Set[Unit]] 或Future[List[Unit]] 不被接受?
【问题讨论】:
标签: scala types type-conversion