首页 > 解决方案 > Scala 中 sum 类型的简写

问题描述

sum 类型在 Scala 中是否有简短的表示?

例如:

产品类型 -(整数、双精度)

函数类型 -(Integer=>Double)

总和类型-?

标签: scala

解决方案


不, Scala中没有用于定义sum 类型的语法糖。事实上,Scala 的类型系统中没有sum 类型作为一个独特的特性。它们需要以某种方式编码,最广泛使用的编码是封闭的子类型层次结构,即总和类型

A = B + C

被编码为

sealed trait A

final class B extends A
final class C extends A

请注意,Scala 也没有产品类型的语法糖。您提到的语法适用于元组类型,而不是产品类型。元组类型只是许多不同类别的产品类型之一。例如, case classes是另一类产品类型。

另请注意,Scala在其类型系统中也没有产品类型的概念。它们被编码为参数类型,这些类型是其中一种类型的子ProductN类型。即元组类型 (A, B)实际上是语法糖

Tuple2[A, B]

定义为

final case class Tuple2[+A, +B](_1: A, _2: B) extends Product2[A, B] with Product with Serializable

当然,类和特征可以看作是记录的变体,所以在某种意义上,Scala 中的每一种类型都可以看作是一种产品类型,这就是编码它们如此容易的原因。


推荐阅读