如何在功能上组成Scala的任何一个

时间:2017-08-01 17:23:48

标签: scala functional-programming either

如果我有一个或多个Either值,我怎么能以功能方式组合它们,这样我就可以记录一个错误,如果有一个左值,但如果有一个正确的值则继续在该函数中。例如

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         
}

请告诉我是否还有其他任何内容可以让我的问题更加明确。

1 个答案:

答案 0 :(得分:3)

像这样的东西,也许:

  ether
   .right
   .flatMap(anotherEither(_).right)
   .flatMap(yetAnother(_).right)
   .left
   .map { err => logError(_.getMessage); err }