如何归档一种返回 T 类型或 Error 类型的 Option 类型?
我正在做一些 Web 请求,响应要么是“ok”并且包含对象,要么调用返回错误,在这种情况下,我想提供一个带有错误原因的 Error 对象。
所以像:
def myRequest() : Result[MyObject] {
if (thereWasAnError) Error(reason) else MyObject
}
如何归档一种返回 T 类型或 Error 类型的 Option 类型?
我正在做一些 Web 请求,响应要么是“ok”并且包含对象,要么调用返回错误,在这种情况下,我想提供一个带有错误原因的 Error 对象。
所以像:
def myRequest() : Result[MyObject] {
if (thereWasAnError) Error(reason) else MyObject
}
scala.EitherEither类型应该正是你想要的:
def myRequest() : Either[String, MyObject] =
if (thereWasAnError)
Left("Some error message")
else
Right(new MyObject)
Either类似于Option但可以保留以下两个可能值之一:left或right。按照惯例,右边是可以的,而左边是错误的。
你现在可以做一些花哨的模式匹配:
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()