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

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

如果说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. XXE任意文件读取(当xml解析内容有输出时)

    利用XXE漏洞读取文件 参考:https://www.jianshu.com/p/4fc721398e97 首先找到登录源码如下: 由题目可以利用XXE漏洞读取文件 先登录用Burp Suite抓包: ...

  2. redis源码分析(四)--aof持久化

    Redis aof持久化 Redis支持两种持久化方式:rdb与aof,上一篇文章中已经大致介绍了rdb的持久化实现,这篇文章主要介绍aof实现. 与rdb方式相比,aof会使用更多的存储空间,因为它 ...

  3. Go基础编程实践(一)—— 操作字符串

    修剪空格 strings包中的TrimSpace函数用于去掉字符串首尾的空格. package main import ( "fmt" "strings" ) ...

  4. bootstrap-wizard向导插件的使用

    引用文件 <link rel="stylesheet" href="bootstrap-wizard/bootstrap-wizard.css"> ...

  5. pytest_用例a失败,跳过测试用例b和c并标记失败xfail

    前言 当用例a失败的时候,如果用例b和用例c都是依赖于第一个用例的结果,那可以直接跳过用例b和c的测试,直接给他标记失败xfail用到的场景,登录是第一个用例,登录之后的操作b是第二个用例,登录之后操 ...

  6. mysql 删除表中多余的重复记录

    =============================================== 2019/7/16_第1次修改                       ccb_warlock == ...

  7. phpdocmentor 生成php 开发文档(转载)

    PHPDocumentor是一个用PHP写的工具,对于有规范注释的php程序,它能够快速生成具有相互参照,索引等功能的API文档.老的版本是phpdoc,从1.3.0开始,更名为phpDocument ...

  8. angular复习笔记1-开篇

    前言 学习和使用angular已经有一段时间了.这段时间利用angular做了一个系统,算是对angular有了一个全面的认识,趁着现在有一些时间,把angular的一些知识记录一下. 安装angul ...

  9. rename file

    https://askubuntu.com/questions/790633/the-o-parameter-in-aria2c-cant-rename-the-downloaded-file You ...

  10. 安装VMware14可能出现的问题

    未能提取文件 安装程序未能提取安装vmware workstation所必须的文件 在没有关闭这个弹框的前提下,Win+R输入%temp%,找到以~setup结尾的文件夹,双击下面的临时文件VMwar ...