Scala 类型系统深入解析
1. 避免使用视图边界
在编写代码时,建议避免使用视图边界,因为它们在未来可能会被弃用。
2. 理解抽象类型
参数化类型在静态类型的面向对象语言中很常见,而 Scala 还支持抽象类型,这种类型在一些函数式语言中较为常见。下面我们来探讨如何使用抽象类型。
// src/main/scala/progscala2/typesystem/abstracttypes/abstract-types-ex.sc
trait exampleTrait {
type t1 // t1 是无约束的
type t2 >: t3 <: t1 // t2 必须是 t3 的超类型且是 t1 的子类型
type t3 <: t1 // t3 必须是 t1 的子类型
type t4 <: Seq[t1] // t4 必须是 Seq[t1] 的子类型
// type t5 = +AnyRef // 错误: 不能使用方差注解
val v1: t1 // 在 t1 定义之前不能初始化
val v2: t2 // 同理...
val v3: t3 // ...
val v4: t4 // ...
}
从上述代码可以看出,t1、t2 和 t3 之间的关系有一些有趣的点。t2 必须处于 t1 和 t3 之间,即 t1 必须是 t2 的超类(或相等),t3 必须是 t2
超级会员免费看
订阅专栏 解锁全文
61

被折叠的 条评论
为什么被折叠?



