上界 下界 视界

object Test{
def main(args:Array[String]):Unit={
def mulBy(factor:Double)=(x:Double)=>factor*x
val triple =mulBy(3);
println(triple(10))
println(mulBy(3)(5)) val p1 = new Pair("dd","ee");
println(p1.smaller) //val p2 = new Pair(1,2); //不可以这么用
val p2 = new Pair2(1,2); //使用视图界定,可以
println(p2.smaller) val p3 = new Pair3(1,2);
println(p3.smaller)
}
} //-----------------上界----------------
class Pair[T<:Comparable[T]] (val first:T,val second :T){
def smaller = if(first.compareTo(second)<0) first else second
} //---------------视图界定---------------
/*
* 如果试着new一个Pair(4,2),编译器会提示Int不是Comparable[Int]的子类型。
* 和java.long.Integer包装类型不同,Scala的Int类型没有实现Comparable。
* 不过,RichInt实现了Comparable[Int],同时还有一个从Int到RichInt的隐式转换
*/
//视图界定
class Pair2[T<% Comparable[T]](val first:T,val second:T){
def smaller = if(first.compareTo(second)<0) first else second
}
/*
* 用Ordered特质会更好,它在Comparable的基础上额外提供了关系操作符
* */
class Pair22[T<% Ordered[T]](val first:T,val second:T){
def smaller = if(first<second) first else second
}
/*上界没有这样做因为java.lang.String实现了Comparable[String],
* 但没有实现Ordered[String]。有了视图界定,这就不是问题。
* 字符串可以被隐式转换成RichString,而RichString是Ordered[String]的子类型
* */ //--------------------上下文界定----------------------
/*
* 视图界定T<%V 要求必须存在一个从T到V的隐式转换。
* 上下文界定的形式为T:M, 其中M是另一个泛型类,它要求必须存在一个类型为M[T]的“隐形值”
* 例如 class Pair[T: Ordering]
* 上述定义要求必须存在一个类型为Ordering[T]的隐式值。 该隐式值可以被用在该类的方法中
* 当你声明一个使用隐式值的方法时,需要添加一个"隐式参数" *
*/
class Pair3[T:Ordering](val first:T,val second : T){
def smaller(implicit ord: Ordering[T])=
if(ord.compare(first,second)<0) first else second
}

Scala学习笔记--上界(<:)、视图界定(<%)、上下文界定(T:M)的更多相关文章

  1. Django:学习笔记(9)——视图

    Django:学习笔记(9)——视图 基础视图 基于函数的视图,我们需要在使用条件语句来判断请求类型,并分支处理.但是在基于类的视图中,我们可以在类中定义不同请求类型的方法来处理相对应的请求. 基于函 ...

  2. Django:学习笔记(8)——视图

    Django:学习笔记(8)——视图

  3. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  4. Scala学习笔记及与Java不同之处总结-从Java开发者角度

    Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...

  5. Scala学习笔记(详细)

    第2章 变量 val,var,声明变量必须初始化:变量类型确定后不可更改 数据类型:与java有相同的数据类型,在scala中数据类型都是对象 特殊类型:Unit:表示无值,只有一个实例值写出(),相 ...

  6. Scala学习笔记之:tuple、array、Map

    [TOC] 本文<快学Scala>的笔记 tuple学习笔记 tuple的定义 对偶是元组(tuple)的最简单形态--元组是不同类型的值的聚集. 元组的值是通过将单个值包含在圆括号中构成 ...

  7. 《C#并发编程经典实例》学习笔记—2.7 避免上下文延续

    避免上下文延续 在默认情况下,一个 async 方法在被 await 调用后恢复运行时,会在原来的上下文中运行. 为了避免在上下文中恢复运行,可让 await 调用 ConfigureAwait 方法 ...

  8. 机器学习(三)--- scala学习笔记

    Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...

  9. scala学习笔记-类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用

    转载自  fineqtbull   http://fineqtbull.iteye.com/blog/477994 有位je上的同学来短信向我问起了Scala类型参数中协变.逆变.类型上界和类型下界的 ...

随机推荐

  1. 这样就算会了PHP么?-1

    公司有用到这些业务,多了解一下总是没错的. 现在开始一系列的PHP学习啦... <?php $boo=true; if($boo==true) echo '变量$boo为真!'; else ec ...

  2. LeetCode_3 sum

    Given an array S of n integers, are there elements a, b, c ? Find all unique triplets in the array w ...

  3. Delphi 函数指针(函数可以当参数)

    首先学习: 指向非对象(一般的)函数/过程的函数指针 Pascal 中的过程类型与C语言中的函数指针相似,为了统一说法,以下称函数指针.函数指针的声明只需要参数列表:如果是函数,再加个返回值.例如声明 ...

  4. Android 最简单的SD卡文件遍历程序

    package com.wenhao.test.sddemo; import java.io.File; import android.app.Activity; import android.os. ...

  5. BZOJ1116: [POI2008]CLO

    1116: [POI2008]CLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 565  Solved: 303[Submit][Status] ...

  6. Linux企业级项目实践之网络爬虫(12)——处理HTTP应答头

    Web服务器的HTTP应答一般由以下几项构成:一个状态行,一个或多个应答头,一个空行,内容文档.设置HTTP应答头往往和设置状态行中的状态代码结合起来.例如,有好几个表示"文档位置已经改变& ...

  7. pyqt例子搜索文本

    #!/usr/bin/env python #-*- coding:utf-8 -*- import sip sip.setapi('QString', 2) sip.setapi('QVariant ...

  8. 图片实时预览JSP加js

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. Cocos2d-x3.0游戏实例之《别救我》第二篇——创建物理世界

    这篇我要给大家介绍两个知识点: 1. 创建游戏物理世界 2. 没了(小若:我噗) 害怕了?不用操心.这太简单了~! 笨木头花心贡献.啥?花心?不呢.是用心~ 转载请注明,原文地址:http://www ...

  10. Swift纯代码走进UICollectionView

    Swift对于一门新的iOS编程语言,他的崛起是必然的 我们这群老程序员们学习新的技能也是必然的 不接受新技能将被这大群体无情的淘汰 So 我欣然接受这门看似不成熟的语言 下面我们说说Swift中比较 ...