scala sealed trait 复杂枚举类


2023年12月19日发(作者:51自学网)

scala sealed trait 复杂枚举类

在 Scala 中,`sealed trait` 可以与 `case class` 结合使用,用于创建复杂的枚举类。`sealed

trait` 保证所有的子类都必须在同一个文件中定义,这样编译器可以检查模式匹配是否完整。而 `case class` 提供了模式匹配的便利性和其他一些特性。

以下是一个示例,演示了如何使用 `sealed trait` 和 `case class` 创建一个复杂的枚举类:

```scala

sealed trait Color

case object Red extends Color

case object Green extends Color

case object Blue extends Color

sealed trait TrafficLight

case object RedLight extends TrafficLight

case object YellowLight extends TrafficLight

case object GreenLight extends TrafficLight

sealed trait Shape

case class Circle(radius: Double) extends Shape

case class Rectangle(width: Double, height: Double) extends Shape

case class Triangle(side1: Double, side2: Double, side3: Double) extends Shape

```

在这个例子中,我们创建了三个 `sealed trait`:`Color`、`TrafficLight` 和 `Shape`,分别代表颜、交通灯和形状。然后,分别使用 `case object` 和 `case class` 创建了这些枚举类的实例。

使用模式匹配时,Scala 的编译器会强制要求检查所有可能的情况,确保完整性。例如:

```scala

def describe(color: Color): String = color match {

case Red => "It's red"

case Green => "It's green"

case Blue => "It's blue"

}

def trafficAction(trafficLight: TrafficLight): String = trafficLight match {

case RedLight => "Stop"

case YellowLight => "Prepare to go"

case GreenLight => "Go"

}

def calculateArea(shape: Shape): Double = shape match {

case Circle(radius) => * radius * radius

case Rectangle(width, height) => width * height

case Triangle(side1, side2, side3) => {

val s = (side1 + side2 + side3) / 2

(s * (s - side1) * (s - side2) * (s - side3))

}

}

println(describe(Red)) // 输出: It's red

println(trafficAction(GreenLight)) // 输出: Go

println(calculateArea(Rectangle(3, 4))) // 输出: 12.0

```

上述示例演示了如何使用 `sealed trait` 和 `case class` 进行模式匹配,确保完整性,同时允许创建具有复杂结构的枚举类。


本文发布于:2024-09-22 23:14:46,感谢您对本站的认可!

本文链接:https://www.17tex.com/fanyi/16260.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:创建   检查   完整性   确保   编译器   便利性
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议