【scala类型系统】higher-kinded-type

1. 基本类型

java: class List<T>{}
scala: class List[T] // 中括号内为类型参数,中括号前为类型构造器

在这里插入图片描述

2. 高阶类型

java: class List2<C<T>>{} // 不支持
scala: class List2[C[T]]class List2[C[_]] // 类型参数C[T]和C[_],也是一个类型构造器

3. 对类型归纳

特定类型(proper type):例如Int、String、List[Int]、List2[List]等类型
泛型类型:用于构造特定类型(proper type)的类型,例如List[T]是一阶类型、List2[C[T]]是高阶类型

4. kind:类别——对类型的抽象

4.1 具体数值的类型Values

1,2,3可以抽象为Int类型
hello、world可以抽象为String类型
这里的Int、String类型都是对具体数值(Values)的抽象

4.2 数据类型的抽象类型types

type是对Int和String的抽象

4.3 类型的抽象类型kind

kind是对多种type的抽象
在这里插入图片描述

4.4 例子

  1. 所有的proper type被抽象为同一种kind,用*表示
    在这里插入图片描述
  1. 一阶类型的抽象,比如Set[T],List[T]
    Set和List都是通过传递一个特定类型(proper type)然后构造出一个特定类型(proper type),用kind表示为: * -> *
    Pair通过传递两个特定类型(proper type)然后构造出一个特定类型(proper type),用kind表示为: (,) -> *
    在这里插入图片描述
  1. 高阶类型的抽象:类型参数也是泛型类型的类型,称之为高阶higher kind,比如List2
    List2通过传递一个泛型类型(类型构造器),然后构造出一个特定类型,用kind表示为:(* -> *) -> * // 注意与pair的区别
    在这里插入图片描述
  1. 总结:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼摆摆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值