接收类型参数的类和特质是“泛型”的,但是它们生成的类型是"参数化"。

”泛型“的意思是我们用一个泛化的类或特质来定义许许多多具体的类型。

如果说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].

learning scasl notes的更多相关文章

  1. Top Deep Learning Projects in github

    Top Deep Learning Projects A list of popular github projects related to deep learning (ranked by sta ...

  2. Why Deep Learning Works – Key Insights and Saddle Points

    Why Deep Learning Works – Key Insights and Saddle Points A quality discussion on the theoretical mot ...

  3. 转:强化学习(Reinforcement Learning)

    机器学习算法大致可以分为三种: 1. 监督学习(如回归,分类) 2. 非监督学习(如聚类,降维) 3. 增强学习 什么是增强学习呢? 增强学习(reinforcementlearning, RL)又叫 ...

  4. 【整理】强化学习与MDP

    [入门,来自wiki] 强化学习是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益.其灵感来源于心理学中的行为主义理论,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的 ...

  5. How to Conduct High-Impact Research and Produce High-Quality Papers

    How to Conduct High-Impact Research and Produce High-Quality Papers Contents From Slide Russell Grou ...

  6. deeplearning 源码收集

    Theano – CPU/GPU symbolic expression compiler in python (from MILA lab at University of Montreal) To ...

  7. 计算机电子书 2018 BiliDrive 备份

    下载方式 根据你的操作系统下载不同的 BiliDrive 二进制. 执行: bilidrive download <link> 链接 文档 链接 Webpack 中文指南.epub (40 ...

  8. 计算机电子书 2017 BiliDrive 备份

    下载方式 根据你的操作系统下载不同的 BiliDrive 二进制. 执行: bilidrive download <link> 链接 文档 链接 斯坦福 cs224d 深度学习与自然语言处 ...

  9. Machine Learning Algorithms Study Notes(3)--Learning Theory

    Machine Learning Algorithms Study Notes 高雪松 @雪松Cedro Microsoft MVP 本系列文章是Andrew Ng 在斯坦福的机器学习课程 CS 22 ...

随机推荐

  1. Python知识点总结篇(四)

    递归 特性 必须有明确的结束条件: 每进入深一层递归,问题规模比上层应有所减少: 递归效率不高,层次更多会导致栈溢出: def calc(n): print(n) if n // 2 > 0: ...

  2. 「UER#2」信息的交换

    「UER#2」信息的交换 吉利题.. 不难发现,置换中的每一个循环是独立的,每一个循环分别对应一个独立的联通块. 根据题目的性质,每一个联通块做的事情等价于其按照编号从小到大遍历的的dfs生成树做的事 ...

  3. sleep方法动态打印 C语言

    #include<Windows.h> #include<stdio.h> #include<stdlib.h> #include<string.h> ...

  4. selenium中的元素操作之下拉列表操作(四)

    下拉列表操作中分为两种:select.非select 1.非select的下拉框操作 非select下拉列表操作与网页元素操作一致,找到元素,定位元素,设置等待,点击元素等等 接下来操作百度的设置按钮 ...

  5. Java调用Http/Https接口(6)--RestTemplate调用Http/Https接口

    RestTemplate是Spring提供的用于访问Http接口的客户端,提供同步的API:在将来的Spring版本中可能会过时,将逐渐被WebClient替代.文中所使用到的软件版本:Java 1. ...

  6. 2019三六零 java面试笔试题 (含面试题解析)

    本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.360等公司offer,岗位是Java后端开发,最终选择去了三六零. 面试了很多家公司,感觉大部分公司考察的点都差 ...

  7. sdcard不可执行.

    Possibly you placed it on your sdcard -- which is mounted with the noexec flag. You either need to m ...

  8. pandas-06 Series和Dataframe的排序操作

    pandas-06 Series和Dataframe的排序操作 对pandas中的Series和Dataframe进行排序,主要使用sort_values()和sort_index(). DataFr ...

  9. python day 17: UML(统一建模语言)

    python day 17 UML:unified modeling languages,是一种基于面向对象的可视化建模语言. 画图语言:画图要合理.即符合逻辑. 历史: 3.1. 软件功能越来越强大 ...

  10. 【vue】vue生命周期---精简易懂-----【XUEBIG】

    主要的生命周期函数分类:    - 创建期间的生命周期函数:(只会调用一次)       + beforeCreate:实例刚在内存中被创建出来,此时,还没有初始化好 data 和 methods 属 ...