Scala 上下文界定
上下文界定的类型参数形式为T:M的形式,其中M是一个泛型,这种形式要求存在一个M[T]类型的隐式值:
/**
* 上下文界定
*/
@Test
def testOrdering_Class_Context() = {
class User(val userName: String, val age: Int) class UserOrderingObject extends Ordering[User] {
override def compare(x: User, y: User): Int = x.age - y.age
} class Pair[T: Ordering](val first: T, val second: T) {
def smaller(implicit ord: Ordering[T]) = {
if (ord.compare(first, second) > 0)
second
else
first
}
} val u1 = new User("u1", 12)
val u2 = new User("u2", 13)
//提供隐式值,隐式值需要提供在创建Pair之前
implicit val uo = new UserOrderingObject
val p = new Pair(u1, u2) println(p.smaller.age) } /**
* 上下文界定
*/
@Test
def testOrdering_Object_Context_1() = {
class User(val userName: String, val age: Int) //TODO 隐式object伴生对象
implicit object UserOrderingObject extends Ordering[User] {
override def compare(x: User, y: User): Int = x.age - y.age
} class Pair[T: Ordering](val first: T, val second: T) {
def smaller() = {
//TODO 获取隐式对象
val ord = implicitly[Ordering[T]]
if (ord.compare(first, second) > 0)
second
else
first
}
} val u1 = new User("u1", 12)
val u2 = new User("u2", 13)
// 有隐式伴生对象不再需要提供隐式值
val p = new Pair(u1, u2) println(p.smaller.age) } /**
* 上下文界定
*/
@Test
def testOrdering_Object_Context_2() = {
class User(val userName: String, val age: Int) object UserOrderingObject extends Ordering[User] {
override def compare(x: User, y: User): Int = x.age - y.age
} class Pair[T: Ordering](val first: T, val second: T) {
def smaller() = { val ord = implicitly[Ordering[T]]
if (ord.compare(first, second) > 0)
second
else
first
}
} val u1 = new User("u1", 12)
val u2 = new User("u2", 13)
implicit val uo = UserOrderingObject
val p = new Pair(u1, u2) println(p.smaller.age) }
Scala 上下文界定的更多相关文章
- Scala学习笔记--上界(<:)、视图界定(<%)、上下文界定(T:M)
上界 下界 视界 object Test{ def main(args:Array[String]):Unit={ def mulBy(factor:Double)=(x:Double)=>fa ...
- 17. Scala泛型、上下界、视图界定、上下文界定
17.1 泛型的基本介绍 17.1.1 基本介绍 1) 如果我们要求函数的参数可以接受任意类型,可以使用泛型,这个类型可以代表任意的数据类型 2) 例如List,在创建List时,可以传入整型.字符串 ...
- Scala 基础(十六):泛型、类型约束-上界(Upper Bounds)/下界(lower bounds)、视图界定(View bounds)、上下文界定(Context bounds)、协变、逆变和不变
1 泛型 1)如果我们要求函数的参数可以接受任意类型.可以使用泛型,这个类型可以代表任意的数据类型. 2)例如 List,在创建 List 时,可以传入整型.字符串.浮点数等等任意类型.那是因为 Li ...
- Scala 深入浅出实战经典 第47讲:Scala多重界定代码实战及其在Spark中的应用
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- 第47讲:Scala多重界定代码实战及其在Spark中的应用源码解析
今天学习了scala的多重界定 T >: A <: B 表示T同时有下界和下界,下界为A,上界为B,A为B的子类型.下界必须写在前面,上界必须写在后面,位置不能颠倒. T<:A wi ...
- Scala视图界定
package big.data.analyse.dataSet /** * 视图界定 * Created by zhen on 2018/11/29. */ /*class Pair_NotPerf ...
- Scala 类型界定
class User(val userName: String,val age: Int) extends Comparable[User] { override def compareTo(o: U ...
- Scala 深入浅出实战经典 第62讲:Scala中上下文界定内幕中的隐式参数实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...
- [Scala] 快学Scala A2L2
集合 13.1 集合的三大类 所有的集合都扩展Iterable特质.集合的三大集合为Seq, Set, Map Seq是一个有先后次序的值的序列,比如数组或列表.IndexSeq允许我们通过整型下表快 ...
随机推荐
- POJ 3268 Silver Cow Party(Dijkstra算法求解来回最短路问题)
题目链接: https://vjudge.net/problem/POJ-3268 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently n ...
- DML和索引内部结构变化
1.修改数据对索引结构的影响 合适的索引对查询性能和效率的提升是巨大的,但是万事有利有弊,拥有索引的表在增.删.改记录时需要去维护索引.如何让增.删.改更快速更高效?这就需要了解数据修改时对索引结构会 ...
- js 计算快速统计中用到的日期
前言 最近在做统计报表模块,其中查询条件用到了快速查询,主要为了方便客户统计查询常用的几个日期纬度,比如本周.上周.本月.上月.昨日. 使用js计算,主要用到了js Date. getDate().g ...
- python学习笔记02--列表和元组
一.简介 数据结构是通过某种方式组织在一起的数据元素的集合. 序列是python中最基本的数据结构,python中包含6种内建的序列,分别是列表.元组.字符串.Unicode字符串.buffer对象和 ...
- 深入浅出 JVM GC(4)常用 GC 参数介绍
# 前言 从前面的3篇文章中,我们分析了5个垃圾收集器,还有一些 GC 的算法,那么,在 GC 调优中,我们肯定会先判断哪里出现的问题,然后再根据出现的问题进行调优,而调优的手段就是 JVM 提供给我 ...
- 基于Visual Studio .NET2015的单元测试
基于Visual Studio .NET2015的单元测试 1. 在Visual Studio .NET2015中创建任意项目. 2. 在某个公共类的公共方法的名称上面点击右键,选择“创建 ...
- 微信小程序支付最容易犯的坑notify_url(支付回调)
最近做了微信小程序支付,支付成功之后发现notify_url回调地址竟然没有访问. 检查了无数次代码,下单结果里面的回调地址看了又看,都没有错啊. 把回调地址复制出来到浏览器上面,外网也是可以访问的啊 ...
- 快速排序 java详解
1.快速排序简介: 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此 ...
- ssr 之Nuxt.js
ssr:server side rendering(服务端渲染),目的是为了解决单页面应用的 SEO 的问题,对于一般网站影响不大,但是对于论坛类,内容类网站来说是致命的,搜索引擎无法抓取页面相关内容 ...
- HDU4278
Faulty Odometer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...