如何归档一种返回 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.Either
Either
类型应该正是你想要的:
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 using
toRight() rather than
toLeft()`:
def myRequest() : Option[MyObject] =
if (thereWasAnError)
None
else
Some(new MyObject)
val result: Either[String, MyObject] = myRequest() toRight "Some error message"
然而,在这个简单的例子中Either
,直接返回结果似乎更直接。myRequest()