Scala中的哪些类型投影有用?为什么Scala的类型系统支持类型投影和路径依赖类型?这个设计决定背后的理由是什么?
答案 0 :(得分:13)
不是一个完整的答案,但我遇到过类型投影的一些用途:
类型级别元编程。例如,请参阅Michid的系列(部分I,II,III),Jesper的implementation of HList和series at Apocalisp。
将一堆类型捆绑到单个类型参数中的方法。例如,在我正在开发的矩阵库中,我定义trait Scalar { type A; type B; type C; ... }
然后将其作为单个参数传递给我的矩阵特征trait Matrix[S <: Scalar] ...
。各个类型可以称为S#A
,S#B
,等等。在Matrix[S]
类型的两个矩阵之间,对于相同的S
,这些类型将是兼容的(与路径相关类型的情况不同)。
答案 1 :(得分:9)
可以使用的一种类型投影是部分类型应用:
({type λ[x]=Tuple2[Int,x]})#λ