总和或产品类型?

Kev*_*ith 5 scala algebraic-data-types

给定以下代数数据类型

scala> sealed trait Person
defined trait Person

scala> case class Boy(name: String, age: Int, x: String) extends Person
defined class Boy

scala> case class Girl(name: String, age: Int, y: Boolean) extends Person
defined class Girl
Run Code Online (Sandbox Code Playgroud)

注意 - 我知道它不是递归类型 - 不涉及递归。

那么,这是 aSum还是Product Type?为什么?

Min*_*hai 3

在这种情况下,Person可以将其视为 sum 类型,因为它的实例是Boyor Girl

Boy(或Girl) 是产品类型,因为 的实例是类型、和Boy的组合。StringIntString

这是一篇关于Scala 中的“混合”案例代数数据类型的非常好的文章