scala类型系统:24) 理解 higher-kinded-type

Posted feng9exe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scala类型系统:24) 理解 higher-kinded-type相关的知识,希望对你有一定的参考价值。

首先我们从最基本的泛型来看:
技术分享图片

现在我们对上面泛型中的类型参数再进一步,也是个泛型会如何呢?
技术分享图片

可以看到,java中不支持类型参数也是泛型类型的情况,而scala支持。这是一个很重要的区别,scala在类型系统上要比java强大。我们现在简单对类型归纳一下,可以分为两类:

技术分享图片

现在我们来看 higher-kinded-type ,先要理解 kind 是什么意思,如果说类型(type)是对数据的抽象,比如1,2,3等抽象为Int类型,”hello”,”wolrd”等可抽象为String类型。那么kind则是对类型的抽象。

技术分享图片

proper type 用 * 号表示:
技术分享图片

泛型类型(用于构造proper type的类型)则可以用下面的方式表示,比如 Set[T], List[T],

再如 Pair[K,V] 泛型类型

技术分享图片

如果泛型类型中的参数类型又是一个泛型,比如前边的 List2

技术分享图片

这种类型参数也是泛型类型的类型,称之为高阶(higher)kind,是不是很像高阶函数?借用这张图做个汇总:

技术分享图片

 

http://hongjiang.info/scala-higher-kinded-type/




以上是关于scala类型系统:24) 理解 higher-kinded-type的主要内容,如果未能解决你的问题,请参考以下文章

Scala在匹配多个案例类时提取参数以进行理解

转载:深入理解Scala的隐式转换系统

理解 Scala 中的“类型”关键字的作用

Scala中的隐式转换|理解

转载:理解scala中的Symbol

Scala型变