加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在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)
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读