Какой тип возврата должен иметь метод Scala, если он может выдавать /возвращать ошибки, но имеет тип возврата Unit?

Таким образом, обычно, когда мы запускаем метод, который может как провалиться, так и вернуть значение, мы можем закодировать тип возвращаемого нами метода как Either[SomeErrorType, ReturnType]. Но часто мы запускаем метод для его побочных эффектов, поэтому тип возвращаемого значения - Unit.

Конечно, я мог бы вернуть Either[SomeErrorType, Unit], но это определенно выглядит странно.

Я также мог бы просто вернуть Option[SomeErrorType], но на самом деле он выглядит не намного лучше (и нарушает возможно существующую симметрию с другими Either[SomeErrorType, NonUnitReturnType] s

Какой у вас подход в этих случаях?

  1. def m(): Unit // and implicitly know that exceptions can be thrown?;
  2. def m(): Either[SomeErrorType, Unit] // this is odd;
  3. def m(): Option[SomeErrorType] // this is odd, as it makes it look as the return type of т () on a successful run is an error code.
  4. Другое, о котором я не могу думать?

Спасибо

8 голосов | спросил devoured elysium 24 SatEurope/Moscow2016-12-24T14:41:31+03:00Europe/Moscow12bEurope/MoscowSat, 24 Dec 2016 14:41:31 +0300 2016, 14:41:31

1 ответ


0

Еще одна опция, которая еще не упоминалась, это Validated из cats . Все упомянутые параметры (Try, Either, Option) - монады, а Validated - аппликативный функтор. На практике это означает, что вы можете накапливать ошибки от нескольких методов, возвращающих Validated, и вы можете выполнять несколько проверок параллельно. Это может не относиться к вам, и это немного ортогонально первоначальному вопросу, но я все же чувствую, что стоит упомянуть в этом контексте.

Что касается исходного вопроса, то с помощью Unit возвращаемого типа для побочной функции вполне подойдет. Тот факт, что эта функция также может возвращать ошибку, не должен мешать вам при определении «реального» (правильного, успешного и т. Д.) Типа возврата. Поэтому, если бы я выбрал исходные параметры, я бы выбрал Either[Error, Unit]. Это определенно не выглядит странным для меня, и если кто-то видит в этом какие-либо недостатки, я бы хотел их узнать.

ответил Haspemulator 24 SatEurope/Moscow2016-12-24T23:55:22+03:00Europe/Moscow12bEurope/MoscowSat, 24 Dec 2016 23:55:22 +0300 2016, 23:55:22

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132