zoukankan      html  css  js  c++  java
  • scala类型系统:24) 理解 higher-kinded-type

    首先我们从最基本的泛型来看:

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

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

    1)特定类型(proper type)
        比如 Int, String, List[Int], List2[List] 等类型
    
    2) 泛型类型:用于构造特定类型(proper type)的类型
        比如 List, List2 等类型
    

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

    proper type 用 * 号表示:

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

    Set 和 List 都是通过传递一个特定类型(proper type)然后构造出一个特定类型(proper type),用kind表示为:
    * -> *
    

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

    Pair 通过传递2个特定类型(proper type)然后构造出一个特定类型(proper type), 用kind表示为:
    (*,*) -> *
    

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

    List2 通过传递一个泛型类型(类型构造器),然后构造出一个特定类型,用kind表示为:
    (*->*) -> *
    

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

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

  • 相关阅读:
    Python爬取网页信息
    C++面向程序设计(第二版)课后习题答案解析
    蓝桥杯——算法分析
    python爬虫——数据爬取和具体解析
    python爬虫——爬取网页数据和解析数据
    Python文件的读写操作
    C++第三章课后作业答案及解析---指针的使用
    C语言蓝桥杯比赛原题和解析
    Web开发技术---简单的登录验证
    C++面向对象程序设计第三章习题答案解析
  • 原文地址:https://www.cnblogs.com/feng9exe/p/9155649.html
Copyright © 2011-2022 走看看