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

Scala中的多选项类型

发布时间:2020-12-16 18:44:50 所属栏目:安全 来源:网络整理
导读:如何归档一种返回类型为T或类型为Error的类型的Option类型? 我正在做一些Web请求,响应是“ok”并包含对象或调用返回错误,在这种情况下,我想提供一个错误原因的Error对象. 所以类似于: def myRequest() : Result[MyObject] { if (thereWasAnError) Error(re
如何归档一种返回类型为T或类型为Error的类型的Option类型?

我正在做一些Web请求,响应是“ok”并包含对象或调用返回错误,在这种情况下,我想提供一个错误原因的Error对象.

所以类似于:

def myRequest() : Result[MyObject] {
  if (thereWasAnError) Error(reason) else MyObject 
}

解决方法

scala.Either

Either类型应该是你想要的:

def myRequest() : Either[String,MyObject] = 
    if (thereWasAnError) 
        Left("Some error message") 
    else 
        Right(new MyObject)

要么类似于Option,要么可以保留两个可能值中的一个:left或right.按照惯例,右边是OK,而左边是错误.

你现在可以做一些奇特的模式匹配:

myRequest() match {
    case Right(myObject) =>
        //...
    case Left(errorMsg) =>
        //...
}

scala.Option.toRight()

类似地,您可以使用Option并将其转换为Either.由于通常* right *值用于成功并留下失败,我建议使用toRight()而不是thantoLeft()`:

def myRequest() : Option[MyObject] =
    if (thereWasAnError)
        None
    else
        Some(new MyObject)

val result: Either[String,MyObject] = myRequest() toRight "Some error message"

但是,在这个简单的例子中,由于myRequest()直接返回Either似乎更直接.

(编辑:李大同)

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

    推荐文章
      热点阅读