gpt4 book ai didi

scala - 在 for comprehension 中切换 monad

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

我正在尝试使用 for-comprehension 来处理 Option 的实例。但是,作为我的最后一步,我使用的函数不返回选项,而是返回 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 */ }

如果有人问这个问题,我很抱歉,但我不知道我正在寻找的术语,所以我无法在这方面有效地搜索网络。

如果我遗漏了一个重要的理论要点,请提供有关我似乎难以理解的事物的文献或其他资源的指针。

最佳答案

这是一种更简洁的测试方式:

for {
o1 <- businessLogic1
o2 <- businessLogic2(o1)
rawList = businessLogic3(o2) if rawList.forall(_.isDefined)
list = rawList.flatten
} {/* processing list */}

或者,您可以先创建展平列表,然后再比较大小:

for {
o1 <- businessLogic1
o2 <- businessLogic2(o1)
rawList = businessLogic3(o2)
list = rawList.flatten if list.size == rawList.size
} {/* processing list */}

关于scala - 在 for comprehension 中切换 monad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62297258/

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