【发布时间】:2018-11-07 17:59:10
【问题描述】:
我正在寻找一个函数,该函数将映射集合 coll: Seq[A],同时应用函数 f: A => B 并返回 Seq[Either[Throwable, B]],以便可以在下游处理错误。
是否有类似的功能预烘焙到某个库中?也许是 Cats 或 Scalaz?
在下面查看我的实现:
import cats.syntax.either._
def eitherMap[A,B](f: A => B, coll: Seq[A]): Seq[Either[Throwable, B]] = {
coll.map { elem =>
Either.catchNonFatal(f(elem))
}
}
【问题讨论】:
-
你真的需要
Either吗?看起来Try会这样做:coll.map(a => Try(f(a))) -
如果你真的需要
Either:coll.map(a => Try(f(a)).toEither) -
这样的功能对我来说似乎太具体了。顺便说一句,看到一个带有
A => B的签名然后不知何故神奇地变成了响应中的一个,感觉有点奇怪。我宁愿将A => Either[Throwable, B]]作为参数,并将f andThen Either.catchNonFatal传递给它。
标签: scala scalaz scala-cats map-function either