在Scala中尝试,反之亦然
发布时间:2020-12-16 09:01:41 所属栏目:安全 来源:网络整理
导读:在 Scala标准库中是否有任何转换到尝试,反之亦然?也许我错过了一些,但我没有找到它们. 解决方法 据我所知,这在标准库中不存在.尽管通常使用“左”失败,“正确”成功,但它的设计是为了支持两种可能的返回类型的概念,而不一定是失败案例.我猜这些转换,一个人
在
Scala标准库中是否有任何转换到尝试,反之亦然?也许我错过了一些,但我没有找到它们.
解决方法
据我所知,这在标准库中不存在.尽管通常使用“左”失败,“正确”成功,但它的设计是为了支持两种可能的返回类型的概念,而不一定是失败案例.我猜这些转换,一个人会希望存在不存在,因为它们并不是真的被设计成一个像Try这样的成功/失败的monad.话虽然说,这很简单,可以自己加上这些转换.这可能看起来像这样:
object MyPimpings{ implicit class EitherPimp[L <: Throwable,R](e:Either[L,R]){ def toTry:Try[R] = e.fold(Failure(_),Success(_)) } implicit class TryPimp[T](t:Try[T]){ def toEither:Either[Throwable,T] = t.transform(s => Success(Right(s)),f => Success(Left(f))).get } } object PimpsExample extends App{ import MyPimpings._ val t:Try[String] = Success("foo") println(t.toEither) val t2:Try[String] = Failure(new RuntimeException("bar")) println(t2.toEither) val e:Either[Throwable,String] = Right("foo") println(e.toTry) val e2:Either[Throwable,String] = Left(new RuntimeException("bar")) println(e2.toTry) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |