(Scala) 错误处理
(Scala) error handling
我目前正在制作一个 return 对象的函数。但是如果我在输入中发现一些无效的东西,我想 return 一些东西来表明这个问题。我无法全神贯注地解决这个问题。在这里处理错误的正确方法是什么?使用选项?但是 returning 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
扩展。成功时,一个 returns 一个 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)
}
我目前正在制作一个 return 对象的函数。但是如果我在输入中发现一些无效的东西,我想 return 一些东西来表明这个问题。我无法全神贯注地解决这个问题。在这里处理错误的正确方法是什么?使用选项?但是 returning 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
扩展。成功时,一个 returns 一个 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)
}