Экземпляры Try
, либо Success
, либо Failure
, где Failure
равно
case class Failure[+T](exception: Throwable)
Обратите внимание, как Failure
должен быть построен с Throwable
, поэтому я думаю, что Try
предназначен для использования в контексте Throwable
s. Поэтому мы не можем сделать что-то вроде
def foo: Try[Int] = {
Failure(42) // Error: type mismatch; found : Int(42) required: Throwable
}
Попробуйте использовать Either
вместо Try
вне контекста исключений.
При рассмотрении комментария рассмотрим
Ни в одном из них вы не обязаны использовать исключения.
Вот пример
sealed trait MyValidationADT[T]
case class Good[T](result: T) extends MyValidationADT[T]
case class Bad[T](result: T) extends MyValidationADT[T]
def foo(i: Int): MyValidationADT[Int] = Bad(42)
foo(11) match {
case Good(result) => "woohoo"
case Bad(result) => "boom"
}
который выводит
res0: String = boom