[英](Scala) error handling
我目前正在做一个返回对象的函数。 但是,如果我在输入中发现无效的东西,我想返回一些东西来指示该问题。 我只是无法解决这个问题。在这里处理错误的正确方法是什么? 使用选项? 但是返回None不会指定任何特定问题。 我有什么问题吗?
case class myClass(value: Int)
def myFunction(input: Int) : myClass
{
//return myClass if succeded
//else return some error - what do I return here?
}
//I've read that to handle some error scenarios you should do something like this:
sealed trait SomeError
object SomeError{
case object UnknownValue extends SomeError
case object SomeOtherError extends SomeError
case object OutOfBounds extends SomeError
}
//But how do I return myClass and this at the same time in case of an error?
非常感谢!! ^^
是的, Option
无法为您提供有关错误的详细信息。 为此,您可以使用更灵活的Either
。 Either
都由Left
和Right
扩展。 成功则返回Right
,失败则返回Left
(按照惯例)。
例如
sealed trait MyTrait
case class MyClass(value: Int) extends MyTrait
def myFunction(input: Int): Either[String, MyTrait] = {
if (input >= 0) Right(MyClass(input)) else Left("input was negative")
}
或使用SomeError
,
def myFunction(input: Int): Either[SomeError, MyTrait] = {
if (input >= 0) Right(MyClass(input)) else Left(OutOfBounds)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.