2017-08-01 66 views
2

如果我有一个或多个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   
} 

让我知道是否还有其他任何我可以添加,使我的问题更清晰。

+0

你应该使用'Try',而不是'Either' – Dima

+0

我使用的返回要么,我想一个第三方库通过不保持代码干净任意转换,如果我不必。 – goodOldFashioned

+2

你在斯卡拉2.11(无论是无论是)或2.12(右偏哪一个)? –

回答

2

事情是这样的,也许:

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