如何在功能上编写Scala的任一个
问题描述:
如果我有一个或多个Either值,我怎样才能以功能方式编写它们,这样如果存在左值,我可以记录错误,但如果存在正确的值, 。例如如何在功能上编写Scala的任一个
def composeEither(ethr: Either[Error, String]): Either[Error, String] = {
ethr match { case Left(err) => log.error(err.getMessage) }
//this obviously will not work but something like map that is right biased
ethr map { e => e } //Just for the sake of example - there might be a different either calculated within the map
}
让我知道是否还有其他任何我可以添加,使我的问题更清晰。
答
事情是这样的,也许:
ether
.right
.flatMap(anotherEither(_).right)
.flatMap(yetAnother(_).right)
.left
.map { err => logError(_.getMessage); err }
你应该使用'Try',而不是'Either' – Dima
我使用的返回要么,我想一个第三方库通过不保持代码干净任意转换,如果我不必。 – goodOldFashioned
你在斯卡拉2.11(无论是无论是)或2.12(右偏哪一个)? –