如何归档一种Option类型,它返回类型为T或类型为Error的东西?
我正在做一些Web请求,响应是“ok”并且包含对象或者调用返回错误,在这种情况下我想提供一个错误原因的Error对象。
类似于:
def myRequest() : Result[MyObject] {
if (thereWasAnError) Error(reason) else MyObject
}
答案 0 :(得分:14)
scala.Either
Either
类型应该是您想要的:
def myRequest() : Either[String, MyObject] =
if (thereWasAnError)
Left("Some error message")
else
Right(new MyObject)
Either
与Option
类似,但可以保留两个可能值中的一个: left 或 right 。按照惯例, right 是正常的,而 left 是一个错误。
您现在可以进行一些奇特的模式匹配:
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()
似乎更直接。