gpt4 book ai didi

scala - 理解为什么 future 结果与 for comprehension 产生 Future[Nothing]

转载 作者:行者123 更新时间:2023-12-03 23:23:14 32 4
gpt4 key购买 nike

试图理解为什么下面的表达式产生 Future[Nothing] 而不是 Future[List[Int]]

def foo(): Future[List[Int]] = Future(List(1,2,3,3,3,4,4,4))
def bar(): Future[Nothing] =for {
fooList <- foo()
f <- fooList.distinct
} yield f

当然,这是简化的例子,我可以直接返回fooList。但我想了解获取 Future[Nothing] 的原因而不是 Future[List[Int]]

最佳答案

我收到您的代码的编译器错误,这是自 fooList.distinct 以来的预期结果应该是 Future用于提取器 <-去工作。

scala> def foo() = Future(List(1,2,2,3))
foo: ()scala.concurrent.Future[List[Int]]


scala> for(fooList <- foo(); f <- fooList.distinct) yield f
<console>:17: error: type mismatch;
found : List[Int]
required: scala.concurrent.Future[?]
for(fooList <- foo(); f <- fooList.distinct) yield f
^

这段代码编译:
scala> for(fooList <- foo(); f = fooList.distinct) yield f
res4: scala.concurrent.Future[List[Int]] = scala.concurrent.impl.Promise$DefaultPromise@1e387e13

这段代码也是(将对 distinct 的调用包装到一个 Future 中):
scala> for(fooList <- foo(); f <- Future(fooList.distinct)) yield f
res5: scala.concurrent.Future[List[Int]] = scala.concurrent.impl.Promise$DefaultPromise@623d211
res4: scala.concurrent.Future[List[Int]] = scala.concurrent.impl.Promise$DefaultPromise@1e387e13

关于scala - 理解为什么 future 结果与 for comprehension 产生 Future[Nothing],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35862073/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com