gpt4 book ai didi

Scala for-comprehension for orElse 而不是 flatMap

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

我很熟悉for领悟和flatMap在选项上。

所以我知道你可以做类似的事情

val a: Option[_] = for {
foo <- Some(x)
bar <- Some(y)
baz <- Some(z)
} yield baz

这给了我 Some(z)如果理解中没有任何内容是 None ,因为它正在做 flatMap在每个语句上。

但实际上我正在寻找相反的东西。我想穿越到 for修真,只要一切都是 None ,就像 orElsefor理解。

例如:
val b: Option[_] = for {
foo <- None
bar <- Some(x)
baz <- None
} yield *return the one with some*

有没有这样的事情,或者最好的方法是什么?

提前致谢!

最佳答案

reduce发现Some不会短路(即,即使第一个元素是 Some ,一千个元素列表也会进行一千次比较)。 find(_.isDefined) + flatten将停止并返回第一个 Some它发现。下面只会做 2 次比较(而不是 5 次)。

val xs: List[Option[Int]] = List(None, Some(1), None, Some(2), None, Some(3))
xs.find(_.isDefined).flatten

关于Scala for-comprehension for orElse 而不是 flatMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23688971/

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