- 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.
推薦閱讀
- 物聯(lián)網(wǎng)工程規(guī)劃技術(shù)
- Windows Server 2003 Active Directory Design and Implementation: Creating, Migrating, and Merging Networks
- SD-WAN架構(gòu)與技術(shù)(第2版)
- 局域網(wǎng)組建、管理與維護(hù)項(xiàng)目教程(Windows Server 2003)
- 通信簡(jiǎn)史:從信鴿到6G+
- 面向物聯(lián)網(wǎng)的嵌入式系統(tǒng)開(kāi)發(fā):基于CC2530和STM32微處理器
- 中小型局域網(wǎng)組建、管理與維護(hù)實(shí)戰(zhàn)
- 網(wǎng)絡(luò)基礎(chǔ)與網(wǎng)絡(luò)管理項(xiàng)目化教程
- 端到端QoS網(wǎng)絡(luò)設(shè)計(jì)
- Hands-On Microservices with Node.js
- 計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)
- 物聯(lián)網(wǎng)
- 從物聯(lián)到萬(wàn)聯(lián):Node.js與樹(shù)莓派萬(wàn)維物聯(lián)網(wǎng)構(gòu)建實(shí)戰(zhàn)
- 黑客心理學(xué):社會(huì)工程學(xué)原理
- Migrating to Drupal7