scala - Scala 中 sum 类型的简写
问题描述
sum 类型在 Scala 中是否有简短的表示?
例如:
产品类型 -(整数、双精度)
函数类型 -(Integer=>Double)
总和类型-?
解决方案
不, Scala中没有用于定义sum 类型的语法糖。事实上,Scala 的类型系统中没有sum 类型作为一个独特的特性。它们需要以某种方式编码,最广泛使用的编码是封闭的子类型层次结构,即总和类型
A = B + C
被编码为
sealed trait A
final class B extends A
final class C extends A
请注意,Scala 也没有产品类型的语法糖。您提到的语法适用于元组类型,而不是产品类型。元组类型只是许多不同类别的产品类型之一。例如, case class
es是另一类产品类型。
另请注意,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 中的每一种类型都可以看作是一种产品类型,这就是编码它们如此容易的原因。
推荐阅读
- javascript - 如何将参数从 js 文件传输到 HTML 中的 javascript?
- javascript - 使用 Javascript 更改所选文本的行高
- c# - 在 Unity 2D 中使用 Physics.OverlapBox?
- javascript - Chart JS 无法识别我的数组
- java - 最后一行不打印?
- scala - 'x: () => Int' 和 'x: => Int' 有什么区别
- javascript - 带有箭头按钮的 aria 角色选项卡
- c# - 对于引用相同结构实例的变量,ReferenceEquals 返回 false
- javascript - 说服 Webpack 解释它的 `Can't resolve 'foo'` 错误
- javascript - 如何在 Hapi js 中为单页应用程序设置路径