Scala:如何将这个flatMap/map转换为for-comprehension?



我在理解如何将其转换为for- understanding时遇到了麻烦。有人能解释一下这是怎么做到的吗?

(parseCommand(x)
.flatMap { c =>
calculate(c).map(r => renderResult(c, r))
})
.left
.map(e => e.value)
.merge
```

你没有提供足够的信息来回答你的问题。

  • parseCommand()返回什么类型?
  • calculate()返回什么类型?
  • 为什么翻译成for理解?你的目标是什么?

假设parseCommand()calculate()返回相同或兼容的类型,那么第一个map()flatMap()可以这样翻译:

(for {
c <- parseCommand(x)
r <- calculate(c)
} yield renderResult(c, r)
).left
.map(e => e.value)
.merge
...

第二个map()不能折叠到这个for中,因为每个for推导式只能有一个map()。但是,您可以将其转换为自己的嵌套for推导式,但请记住,它对编译器没有任何影响,因此使用for的唯一真正原因是增强代码的可读性,而嵌套for很少能实现这一点。

我设法把它转换成这样:

(for {
c <- parseCommand(x)
r <- calculate(c)
} yield renderResult(c, r)).left.map(x => x.value).merge
}

最新更新