gpt4 book ai didi

scala - Scala 中的条件 future

转载 作者:行者123 更新时间:2023-12-04 15:10:54 25 4
gpt4 key购买 nike

鉴于这两个future,我只需要在条件为真时运行第一个(参见if y>2)。但我得到一个异常Future.filter 谓词不满足。这是什么意思以及如何修复该示例?

object TestFutures extends App {

val f1 = Future {
1
}

val f2 = Future {
2
}

val y = 1

val x = for {
x1 <- f1 if y>2
x2 <- f2
} yield x1 + x2


Thread.sleep(5000)
println(x)
}

最佳答案

问题包含一些术语问题。

鉴于要求,“只有在条件为真时,我才需要运行第一个( future 的)”,那么该要求的一种可能实现是:

val f1 = if (cond) Some(Future(op)) else None

这是因为 Future定义后将开始执行。

回到问题中的表达方式:

val x = for {
x1 <- f1 if y>2
x2 <- f2
} yield x1 + x2

这是说“我想要 f1 if(cond)结果”而不是“我想要执行 f1 if(cond)”。

这将是一种方式:(注意 future 是如何在 for-comprehension 中定义的,而 condition 在外部):

val x = if (y > 2) {
for {
x1 <- Future(op1)
x2 <- Future(op2)
} yield x1 + x2
} else ???

在 for-comprehensions 中正确使用守卫是针对来自 for-comprehension 表示的计算的值评估表达式。例如:

“我想执行 f2 仅当f1 的结果大于y 时”

val x = for {
x1 <- f1
x2 <- Future(op) if x1 > y
} yield x1 + x2

注意这里的条件如何涉及计算的中间结果(在本例中为 x1)


附注:要等待 future 的结果,请使用 Await.result(fut, duration)而不是 Thread.sleep(duration)

关于scala - Scala 中的条件 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40778487/

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