【发布时间】:2019-06-04 22:11:38
【问题描述】:
我发现自己有几次这样的情况,我有一个减速器/组合 fn,如下所示:
def combiner(a: String, b: String): Either[String, String] = {
(a + b).asRight[String]
}
它是一个虚拟实现,但 fn 可能会失败,因此它返回一个 any。然后我有一个值列表,我想通过 reduce / fold 传递。我能想到的最好的(假设列表的类型是一个幺半群)是这样的:
def combine(items: Vector[String]) = {
items.foldLeft(Monoid[String].empty.asRight[String]) { case (acc, value) =>
acc.flatMap( accStr => combiner(accStr, value))
}
}
它有点笨拙,因为它是一种相当通用的模式,我怀疑有更好的方法来使用猫。
【问题讨论】:
-
您想在第一个错误时快速失败吗?或者你也想积累?
标签: scala functional-programming scala-cats