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允许我们通过整型下表快 ...
随机推荐
- docker常用命令记录
Docker官方镜像中心:https://hub.docker.com/explore/ 参考:慕课网docker视频教程 https://www.imooc.com/video/14625 1.启动 ...
- 一个简单有趣的Python音乐播放器
(赠新手,老鸟绕行0.0) Python版本:3.5.2 源码如下: __Author__ = "Lance#" # -*- coding = utf-8 -*- #导入相应模块 ...
- 【Redis】4、Redis学习资料
Redis 集群规范 http://www.redis.cn/topics/cluster-spec.html Redis 集群教程 http://www.redis.cn/topics/cluste ...
- callback.js
function writeCode(callback){ console.log("i am waiting....") callback(); console.log(&quo ...
- expressjs项目里使用npm run dev,实现热更新
只需要在package.json文件里添加一句代码 "dev": "supervisor -i ./views ./bin/www" 添加的位置如上图所示, 然 ...
- jquery之商城菜单
实现效果:悬浮总菜单,显示分类菜单,移走隐藏总菜单,悬浮分类菜单,显示商品种类,移走隐藏商品种类和分类菜单,悬浮商品种类,显示商品种类和分类菜单,移走隐藏商品菜单和分类菜单. 代码如下: <!D ...
- php使用PHPexcel类读取excel文件(循环读取每个单元格的数据)
error_reporting(E_ALL); date_default_timezone_set('Asia/ShangHai'); include_once('Classes/PHPExcel/I ...
- python自动化开发-4
装饰器之我见 python里的装饰器到底是个什么东东,初看起来,可能有的小伙伴会发懵啊,哈哈. 先来个装饰器的例子瞅瞅: Author:RYB # __*__coding:utf-8__*__ ''' ...
- maven(四):一个基本maven项目的pom.xml配置
继续之前创建的test项目,一个基本项目的pom.xml文件,通常至少有三个部分 第一部分,项目坐标,信息描述等 <modelVersion>4.0.0</modelVersion& ...
- 【HANA系列】SAP HANA XS使用服务器JavaScript Libraries详解
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用服务器 ...