【发布时间】:2020-09-29 11:53:44
【问题描述】:
我正在尝试使用 for-comprehension 来处理 Options 的实例。但是,作为我的最后一步,我使用的函数不返回选项,而是返回 List[Option[Something]](注意,不是 OptionT[List, Something])。如果列表中的所有选项都是Some 的实例,我只想继续。作为 flatMap 调用的一部分,有没有一种干净的方法来处理它?目前我是这样设置的:
for {
o1 <- businessLogic1
o2 <- businessLogic2(o1)
rawList = businessLogic3(o2)
list <- if (rawList.forall(_.isDefined))
Some(rawList.map(_.get))
else
None
} { /* processing list */ }
很抱歉,如果有人问了这个问题,但我不知道我正在寻找什么的术语,所以我无法在这方面有效地搜索网络。
如果我遗漏了一个重要的理论点,请提供关于我似乎难以理解的事物的文献或其他资源。
【问题讨论】:
-
示例 3:docs.scala-lang.org/tutorials/FAQ/yield.html?你能不能在最后添加 if 并检查列表的内容,就在屈服之前?
标签: scala functional-programming monads