官术网_书友最值得收藏!

  • Scala Programming Projects
  • Mikael Valot Nicolas Jorand
  • 233字
  • 2021-07-23 16:25:26

Using Either

The Either type is an ADT that represents a value of either a Left type or a Right type. A simplified definition of Either would be the following:

sealed trait Either[A, B]
case class Left[A, B](value: A) extends Either[A, B]
case class Right[A, B](value: B) extends Either[A, B]

When you instantiate a Right type, you need to provide a value of a B type, and when you instantiate a Left type, you need to provide a value of an A type. Therefore, Either[A, B] can either hold a value of type A or a value of type B.

The following code shows an example of such a usage that you can type in a new Scala worksheet:

def divide(x: Double, y: Double): Either[String, Double] =
if (y == 0)
Left(s"$x cannot be divided by zero")
else
Right(x / y)

divide(6, 3)
// res0: Either[String,Double] = Right(2.0)
divide(6, 0)
// res1: Either[String,Double] = Left(6.0 cannot be divided by zero)

The divide function returns either a string or a double:

  • If the function cannot compute a value, it returns an error String wrapped in a Left type
  • If the function can compute a correct value, it returns the Double value wrapped in a Right type

By convention, we use Right to represent the correct or right value, and we use Left to represent an error.

主站蜘蛛池模板: 伊金霍洛旗| 宜都市| 高唐县| 翁源县| 公安县| 柘城县| 衡南县| 修文县| 通化市| 广河县| 玉树县| 汽车| 潞城市| 同仁县| 保亭| 界首市| 眉山市| 霍山县| 汶川县| 泽州县| 新昌县| 华容县| 大同市| 凌源市| 石景山区| 阿拉善右旗| 青浦区| 策勒县| 克拉玛依市| 清徐县| 朝阳县| 彰化县| 西乡县| 阜新市| 黔东| 抚州市| 兴隆县| 五指山市| 双江| 蓝田县| 息烽县|