Это правда, Option
не может дать вам подробную информацию о вашей ошибке. Для этого вы можете использовать Either
, который является более гибким. Either
расширяется на Left
и Right
. При успехе возвращается Right
, при ошибке Left
(по соглашению).
1010 *, например *
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)
}