上界 下界 视界

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. 我和小美的撸码日记(3)之一句话搞定MVC表单页数据绑定与提交

    “尼玛哥,你今天有空么?” “今天周日呀,怎么会没空,你这是要约么?麻辣烫凉皮我都吃,在哪儿,我一会儿就到.” “约你妹呀,我昨天都加一天班了,东西到现在还没搞完,你给我快点过来呀,我需要你!” “别 ...

  2. 一些关于poi导入的样例

    获取请求对象 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; 获取上传的文件 ...

  3. repo sync 时的自动续接脚本[转]

    按理说在repo init  ....之后使用repo sync就可以开始下载源码了,但是在下载过程中经常会出现没网速“死”的情况.当然,我修改了/etc/hosts文件之后就再也么有死过.在没网速提 ...

  4. CCI_chapter 19 Moderate

    19 1  Write a function to swap a number in place without temporary variables void swap(int &a, i ...

  5. 单线程Singleton模式的几个要点

    1.Singleton模式中的实例构造器可以设置为protected以允许子类派生.2.Singleton模式一般不要支持ICIoneable接口,因为这可能会导致多个对象实例,与Singleton模 ...

  6. qt 拖拽 修改大小(使用了nativeEvent和winEvent)

    http://www.cnblogs.com/swarmbees/p/5621543.html http://blog.sina.com.cn/s/blog_9e59cf590102w3r6.html

  7. authbind start tomcat services as user with less that 1024 ports. linux常规用户使用tomcat的80端口

    Start tomcat services using authbind this will allow user to start ports less than 1024 we do not ne ...

  8. SQL SERVER 自带系统存储过程分类

    目录存储过程 用于实现 ODBC 数据字典功能,并隔离 ODBC 应用程序以使其不受基础系统表更改的影响. 变更数据捕获存储过程 用于启用.禁用.或报告变更数据捕获对象. 游标存储过程 用于实现游标变 ...

  9. [转]ubuntu14.04安装好用的google拼音输入法

    原文网址:http://jingyan.baidu.com/article/219f4bf7d4a183de442d38f2.html 装了ubuntu14.04后感觉自带的拼音输入法不好用的有没有, ...

  10. Spring 的优秀工具类盘点第 2 部分

    特殊字符转义 由于 Web 应用程序需要联合使用到多种语言,每种语言都包含一些特殊的字符,对于动态语言或标签式的语言而言,如果需要动态构造语言的内容时,一个我们经常会碰到的问题就是特殊字符转义的问题. ...