gpt4 book ai didi

scala - Future中的 bool 逻辑[Boolean]

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

在非并发编程中,我们通常有这种 bool 逻辑:

boolean canIMarryher(){
return iLoveHer() && myParentsLoveHer() && shesHot() && sheSaidYes();
}

我的问题来了,如果所有这些(或其中一些条件)都是 Scala 中的 Future[Boolean] 呢?我还能像上面的例子一样得到一个清晰的方法吗?

更新
如您所知,在运行时的 bool 逻辑中,我们将进行“优化”,例如:使用 && 时立即返回并遇到了一个 false或使用 ||遇到了一个 true .我也可以在 Future[Boolean] 中使用它吗?

问候,
德鲁

最佳答案

其他带有 for-comprehension 和 reduce 的答案不会“短路”。也就是说,如果第一个 future 需要一段时间才能完成,即使第二个 future 评估 false,我们也会等待整个时间。立即地。

澄清一下,这与传统 bool 逻辑中的短路不同,在传统 bool 逻辑中,我们按名称评估运算符的右侧。相反,目标是尽快产生答案。我们立即开始每个 future 的计算,并在结果出现时尽可能短路。在最好的情况下,我们只需要等待最快的 future,在最坏的情况下,我们必须等待最慢的 future。

这是一种支持这种类型短路的方法:

def all(futures: Future[Boolean]*)(implicit executor: ExecutionContext): Future[Boolean] = {
Future.find(futures) { !_ } map { _.isEmpty }
}

def canIMarryher = all(iLoveHer, myParentsLoveHer, shesHot, sheSaidYes)

如果你真的想,你可以更进一步地定义&&和|| Future[Boolean] 的方法

关于scala - Future中的 bool 逻辑[Boolean],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32414803/

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