我在理解如何将其转换为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
}