码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-06-08 15:48:29      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:class   pair   string   java   抽象   种类   区别   type   inf   

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

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

可以看到,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

标签:class   pair   string   java   抽象   种类   区别   type   inf   

原文地址:https://www.cnblogs.com/feng9exe/p/9155649.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!