我正在寻找一个将映射到集合group.grouper.names
Out[96]: ['col_1', 'col_2']
的函数,同时应用函数coll: Seq[A]
并返回f: A => B
,以便可以在下游处理错误。
是否存在与此类似的功能,并且该功能已预先烘焙到某些库中?也许是猫还是斯卡拉兹?
请在下面查看我的实现
Seq[Either[Throwable, B]]
答案 0 :(得分:2)
每jwvh:coll.map(a => Try(f(a)).toEither)
似乎是最简单/最干净的方法。
答案 1 :(得分:0)
不幸的是,我不认为您正在寻找的东西已经完全存在了……但是这是一个通用的实现,可以满足您的需求,也许进一步阅读cats中的ApplicativeError类型类将为您提供更近一些
type ErrorOr[A] = Either[Throwable, A]
object MapAttempt {
implicit class MapAttemptOps[A, F[_] : Functor](fa: F[A]) {
def mapAttempt[B, G[_]](f: A => B)(implicit appErr: ApplicativeError[G, Throwable]): F[G[B]] =
fa.map(a => appErr.catchNonFatal(f(a)))
}
}
import MapAttempt._
List(0, 1, 2, 3, 4).mapAttempt[Int, ErrorOr](5 / _)
返回:
res0:List [ErrorOr [Int]] = List(Left(java.lang.ArithmeticException:/ 零),Right(5),Right(2),Right(1),Right(1))
编辑:不需要将特征和语法分开,所以我将其删除