(Scala) обработка ошибок - PullRequest
0 голосов
/ 02 июля 2018

В настоящее время я делаю функцию, которая возвращает объект. Но если я нахожу что-то недопустимое во входных данных, я хочу вернуть что-то, чтобы указать на эту проблему. Я просто не могу обдумать это .. Каков правильный способ обработки ошибок здесь? Использование параметров? Но возвращение None не указывает на какие-либо конкретные проблемы. Я что-то не так делаю? :) 1001 *

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?

Спасибо большое !! ^^

1 Ответ

0 голосов
/ 02 июля 2018

Это правда, 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...