Scala学习笔记--上界(<:)、视图界定(<%)、上下文界定(T:M)
上界 下界 视界
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)的更多相关文章
- Django:学习笔记(9)——视图
Django:学习笔记(9)——视图 基础视图 基于函数的视图,我们需要在使用条件语句来判断请求类型,并分支处理.但是在基于类的视图中,我们可以在类中定义不同请求类型的方法来处理相对应的请求. 基于函 ...
- Django:学习笔记(8)——视图
Django:学习笔记(8)——视图
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- Scala学习笔记及与Java不同之处总结-从Java开发者角度
Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...
- Scala学习笔记(详细)
第2章 变量 val,var,声明变量必须初始化:变量类型确定后不可更改 数据类型:与java有相同的数据类型,在scala中数据类型都是对象 特殊类型:Unit:表示无值,只有一个实例值写出(),相 ...
- Scala学习笔记之:tuple、array、Map
[TOC] 本文<快学Scala>的笔记 tuple学习笔记 tuple的定义 对偶是元组(tuple)的最简单形态--元组是不同类型的值的聚集. 元组的值是通过将单个值包含在圆括号中构成 ...
- 《C#并发编程经典实例》学习笔记—2.7 避免上下文延续
避免上下文延续 在默认情况下,一个 async 方法在被 await 调用后恢复运行时,会在原来的上下文中运行. 为了避免在上下文中恢复运行,可让 await 调用 ConfigureAwait 方法 ...
- 机器学习(三)--- scala学习笔记
Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...
- scala学习笔记-类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用
转载自 fineqtbull http://fineqtbull.iteye.com/blog/477994 有位je上的同学来短信向我问起了Scala类型参数中协变.逆变.类型上界和类型下界的 ...
随机推荐
- JavaWeb学习笔记--跳转方法小结
服务端跳转:1. RequestDispatcher.forward() public void doGet(HttpServletRequest request, HttpServletRespo ...
- C语言里面关于数组的一个容易忽视的小细节
ginobili@VM_44_28_sles10sp1:~/code> cat test3.cpp #include <stdio.h> int main(){ char a[5] ...
- 将rcc.exe添加到系统Path
rcc不是内部或外部命令搜索下rcc.exe二进制文件的位置,然后将该路径添加到path环境变量中. 在cmd中输入path,显示当前的环境变量. 然后path = %path%;C:\Qt\4.8. ...
- 【转】Ubuntu 10.04 LTS 的窗口控制按钮从左上角调整到右上角
原文网址:http://www.linuxidc.com/Linux/2010-05/26111.htm 升级到Ubuntu 10.04后最大的问题,是最小最大和关闭按钮,放到了左边.这叫Ubuntu ...
- 在OCX初始化时获取其在网页中的DOM对象
OCX初始化的时候会调用SetClientSite,会传入IOleClientSite对象. CComQIPtr<IOleControlSite, &IID_IOleControlSit ...
- jsp中iframe所包含的页面调用父页面的function方法
a.jsp中写了注册的Ext窗体loginWindow,也用iframe包含了另一个b.jsp,当在b.jsp中也有点击注册的链接,这时需要用到调用a.jsp中的loginWindow,因为如果你重新 ...
- Arcgis API for Android之GPS定位
欢迎大家增加Arcgis API for Android的QQ交流群:337469080 先说说写这篇文章的原因吧,在群内讨论的过程中,有人提到了定位的问题,刚好,自己曾经在做相关工作的时候做过相关的 ...
- mini2440裸机试炼之——DMA直接存取 实现Uart(串口)通信
这个仅仅能作为自己初步了解MDA的开门篇 实现功能: 将字符串数据通过DMA0通道传递给UTXH0,然后在终端 显示.传输数据完后.DMA0产生中断,beep声, LED亮. DMA基本知识 计算机系 ...
- java后台訪问url连接——HttpClients
java后台訪问url,并传递数据--通过httpclient方式 须要的包,包可能多几个额外的,假设无用或者冲突删除就可以.httpclient是使用的是4.4.1的版本号:http://downl ...
- FileZilla 安装配置参考
http://www.admin10000.com/document/72.html 解决 NAT issue https://wiki.filezilla-project.org/Network_C ...