gpt4 book ai didi

scala - Scala 中的final 类和sealed 类有什么区别?

转载 作者:行者123 更新时间:2023-12-03 03:28:33 28 4
gpt4 key购买 nike

Scala中有两种类型的修饰符:finalsealed

它们之间有什么区别?什么时候应该使用其中一种而不是另一种?

最佳答案

final 类无法扩展,句号。

sealed 特征只能在其声明的源文件中进行扩展。这对于创建 ADT(代数数据类型)非常有用。 ADT 由其派生类型的总和定义。

例如:

  • Option[A]Some[A] + None 定义。
  • List[A]:: + Nil 定义。
<小时/>
sealed trait Option[+A]

final case class Some[+A] extends Option[A]
object None extends Option[Nothing]

由于 Option[A] 是密封的,因此其他开发人员无法对其进行扩展 - 这样做会改变其含义

Some[A] 是最终的,因为它不能延长,句号。

<小时/>

作为一个额外的好处,如果一个特征被密封,如果您的模式匹配不够详尽,编译器可以警告您,因为它知道 Option仅限于一些

opt match {
case Some(a) => "hello"
}

Warning: match may not be exhaustive. It would fail on the following input: None

关于scala - Scala 中的final 类和sealed 类有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32199989/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com