我知道,将yield转换为一系列flatMaps,然后是最终地图.我发现自己经常希望它在最终的flatMap中结束.到目前为止,我的解决方法是进行收益率,然后进行平仓,如下所示:
val aOpt = Some("a")
val bOpt = Some("b")
def fakeComplexFunc(s1: String, s2: String): Option[String] = Some(s1 + s2)
(for {
a <- aOpt
b <- bOpt
} yield {
// Pretend this is a long block with lots of stuff in it
fakeComplexFunc(a, b)
}).flatten
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?对于像这样的案件,有什么最佳做法吗?如果我最终陷入这种境地,我是否做了一些彻底错误的事情?
你可以绑定结果fakeComplexFunc并产生它:
for {
a <- aOpt
b <- bOpt
c <- fakeComplexFunc(a, b)
} yield c
Run Code Online (Sandbox Code Playgroud)