learning scasl notes
2024-10-15 22:00:10
接收类型参数的类和特质是“泛型”的,但是它们生成的类型是"参数化"。
”泛型“的意思是我们用一个泛化的类或特质来定义许许多多具体的类型。
如果说S是类型T的子类型,那么Queue[S]应不应该被当作Queue[T]的子类型?
如果是,可以说Queue特质在类型参数T上是协变的(convariant).
trait Queue[+T] { ... }
在类型形参前面上+表示子类型关系在这个参数上是协变。
trait Queue[-T] { ... }
如果说T是类型S的子类型,则表示Queue[S] 是 Queue[T]的子类型。
类型参数是协变的,逆变的,还是不变的,被称作类型参数的型变(variance).
放在类型参数旁边的+和-被称作型变注解(variance annotation).
下界:
class Queue[+T] (private val leading: List[T],
private val trailling: List[T]) {
def enqueue[ U >: T ](x : U) = new Queue[U] (leading, x :: trailling)
}
新的定义给queue添加了一个类型参数U, 并用 ”U >: T"这样的语法定义了U的下界为T,
这样一来, U必须是T的超类型。
假定有一个Fruit类的两个子类Apple和Orange,按Queue类的定义,可以对Queue[Apple]
追加一个Orange,其结果是一个Queue[Fruit].
最新文章
- 【背景建模】PBAS
- SQL SERVER中架构的理解
- Scala语言初识
- Bash中的$符号
- Dynamic系列--Dynamic 与反序列化
- Android进程间通信(IPC)机制Binder简要介绍和学习计划
- mongodb中数据类型的坑
- 三点顺序_nyoj_68(计算几何).java
- 纪中集训 Day 8 & Last Day
- Spring cloud Greenwich Eureka
- uva11754 中国剩余定理+暴力搜索
- 20190320 Dojo常用方法总结
- 并发编程---IO模型
- SAP字段与表的对应关系
- SpringMvc和Mybatis整合总结
- 自动化工具gulp搭建环境(详解)
- BZOJ 1208 宠物收养所 set+二分
- luogu2296 [NOIp2014]寻找道路 (bfs)
- 关于DIY操作系统的断更道歉
- Android SharedPreference
热门文章
- 【转】ZYNQ中三种实现GPIO的方式
- Gradle 翻译 tips and recipes 使用技巧 MD
- Linux学习笔记之tail命令显示最后n行
- Spring Boot Freemarker特别篇之contextPath【从零开始学Spring Boot
- JS中的逻辑运算符&;&;、||
- selenium中的元素操作之三大切换(二)
- Workerman简单开发示例实践(一)
- Java虚拟机如何运行Java字节码
- 日志 logback-spring.xml配置
- DoNetCore Web Api 采用Swagger进行接口文档管理