5

如何归档一种返回 T 类型或 Error 类型的 Option 类型?

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

所以像:

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

1 回答 1

14

scala.Either

Either类型应该正是你想要的:

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

Either类似于Option但可以保留以下两个可能值之一:leftright。按照惯例,右边是可以的,而左边是错误的。

你现在可以做一些花哨的模式匹配:

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

scala.Option.toRight()

同样,您可以使用Option并将其翻译为Either. 由于通常*right* values is used for success and left for failure, I suggest usingtoRight() rather thantoLeft()`:

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

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

然而,在这个简单的例子中Either,直接返回结果似乎更直接。myRequest()

于 2012-05-28T13:00:59.480 回答