使用implicitly demo
泛型: Context Bounds
// //定义一个隐式值, 这个值不能少, 要不找不到比较的对象
implicit val personCompartor = new Ordering[Person] {
override def compare(p1: Person, p2: Person): Int = {
p1.age - p2.age
}
} def main(args: Array[String]): Unit = { val jack = new Person("jack", 20)
val tom = new Person("tom", 30) val compareComm1 = new CompareComm(jack, tom)
println(compareComm1.greater)
println("---------------------") val compareComm2 = new CompareComm2(jack, tom)
println(compareComm2.geatter) println("--------------------------")
val compareComm3 = new CompareComm3(jack, tom)
println(compareComm3.greatter) } } // 一个普通漫的personl类
class Person(val name: String, val age: Int) {
override def toString: String = this.name + "\t" + this.age
} /** 方式1
* implicit comparetor: Ordering[T] 是一个隐式参数
* 前面Ordered , Ordering
* Ordered和Ordering的区别
* Ordering继承了java中的Comparator接口,而Ordered继承了java的Comparable接口。
* 在java中的Comparator是一个外部比较器(需要定义一个类来实现比较器),而Comparable则是一个内部比较器,在类内部重载compareTo函数。
*
*/ class CompareComm[T: Ordering](obj1: T, obj2: T)(implicit comparetor: Ordering[T]) { def greater = if (comparetor.compare(obj1, obj2) > 0) obj1 else obj2
} /**
* 方式二
* 隐式参数也可以直接写到方法中
*/ class CompareComm2[T: Ordering](obj1: T, obj2: T) {
def geatter = {
def f1(implicit comparetor: Ordering[T]) = comparetor.compare(obj1, obj2) if (f1 > 0) obj1 else obj2
}
} /**
* 方式3,使用implicitly语法糖,最简单(推荐使用)
*/ class CompareComm3[T: Ordering](obj1: T, obj2: T) {
def greatter = {
//发生隐式转换,获取到隐式值 personComparetor
val comparetor = implicitly[Ordering[T]] if (comparetor.compare(obj1, obj2) > 0) obj1 else obj2 }
}
模式匹配日志:
//标准模式匹配, 可以在匹配中读取变量名称, 模式中也可是设置守卫, 可以变量赋值_newVa
def judgeGrade(name: String, grade: String) {
grade match {
case "A" => println(name + ", you are excellent")
case "B" => println(name + ", you are good")
case "C" => println(name + ", you are just so so")
case _newValu if name == "leo" => println(name + ", you are a good boy, come on ,_newValu: " + _newValu)
case _ => println("you need to work harder")
}
} judgeGrade("leo", "D") //类型模式匹配
def test(e: Exception): Unit = {
e match {
case e1: IllegalArgumentException => println("IllegualArgument")
case e2: FileNotFoundException => println("FileNotFoundExceptino")
case e3: NullPointerException => println("NullPointer")
case _: Exception => println("common Exception")
} } //对 Array 进行模式匹配
def greeting(arr: Array[String]) {
arr match {
case Array("Leo") => println("Hi, Leo!")
case Array(girl1, girl2, girl3) => println("Hi, girls, nice to meet you. " + girl1 + " and " + girl2 + " and " + girl3)
case Array("Leo", _*) => println("Hi, Leo, please introduce your friends to me.")
case _ => println("hey, who are you?")
}
} //对 List 进行模式匹配
def greeting(list: List[String]) {
list match {
case "Leo" :: Nil => println("Hi, Leo!") //一个元素, 后面是 nil
case girl1 :: girl2 :: girl3 :: Nil => println("Hi, girls, nice to meet you. " + girl1 + " and " + girl2 + " and " + girl3)
case "Leo" :: tail => println("Hi, Leo, please introduce your friends to me.")
case _ => println("hey, who are you?")
}
} //case Class 模式匹配
class Person case class Teacher(name: String, subject: String) extends Person case class Student(name: String, classroom: String) extends Person def judgeIdentify(p: Person) {
p match {
case Teacher(name, subject) => println("Teacher, name is " + name + ", subject is " + subject)
case Student(name, classroom) => println("Student, name is " + name + ", classroom is " + classroom)
case _ => println("Illegal access, please go out of the school!")
}
} //Option 模式匹配
val grades = Map("Leo" -> "A", "Jack" -> "B", "Jen" -> "C") def getGrade(name: String) {
val grade = grades.get(name)
grade match {
case Some(grade) => println("your grade is " + grade)
case None => println("Sorry, your grade information is not in the system")
}
}
使用implicitly demo的更多相关文章
- React报错之Parameter 'props' implicitly has an 'any' type
正文从这开始~ 总览 当我们没有为函数组件或者类组件的props声明类型,或忘记为React安装类型声明文件时,会产生"Parameter 'props' implicitly has an ...
- 通过一个demo了解Redux
TodoList小demo 效果展示 项目地址 (单向)数据流 数据流是我们的行为与响应的抽象:使用数据流能帮我们明确了行为对应的响应,这和react的状态可预测的思想是不谋而合的. 常见的数据流框架 ...
- 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo
有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...
- 在线浏览PDF之PDF.JS (附demo)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html#skill 下载地址:http://mozilla.gith ...
- 【微框架】Maven +SpringBoot 集成 阿里大鱼 短信接口详解与Demo
Maven+springboot+阿里大于短信验证服务 纠结点:Maven库没有sdk,需要解决 Maven打包找不到相关类,需要解决 ps:最近好久没有写点东西了,项目太紧,今天来一篇 一.本文简介 ...
- vue双向数据绑定原理探究(附demo)
昨天被导师叫去研究了一下vue的双向数据绑定原理...本来以为原理的东西都非常高深,没想到vue的双向绑定真的很好理解啊...自己动手写了一个. 传送门 双向绑定的思想 双向数据绑定的思想就是数据层与 ...
- Android Studio-—使用OpenCV的配置方法和demo以及开发过程中遇到的问题解决
前提: 1.安装Android Studio(过程略) 2.官网下载OpenCV for Android 网址:http:opencv.org/downloads.html 我下载的是下图的版本 3. ...
- iOS之ProtocolBuffer搭建和示例demo
这次搭建iOS的ProtocolBuffer编译器和把*.proto源文件编译成*.pbobjc.h 和 *.pbobjc.m文件时,碰到不少问题! 搭建pb编译器到时没有什么问题,只是在把*.pro ...
- 钉钉开放平台demo调试异常问题解决:hostname in certificate didn't match
今天研究钉钉的开放平台,结果一个demo整了半天,这帮助系统写的也很难懂.遇到两个问题: 1.首先是执行demo时报unable to find valid certification path to ...
随机推荐
- 牛客网PAT练兵场-人口普查
题目地址:https://www.nowcoder.com/pat/6/problem/4054 题解:结构体排序即可 /** * Copyright(c) * All rights reserved ...
- muduo源码解析10-logstream类
FixedBuffer和logstream class FixedBuffer:noncopyable { }: class logstream:noncopyable { }: 先说一下包含的头文件 ...
- muduo源码解析4-exception类
exception class exception:public std::exception { }; 作用: 实现了一个异常类,继承于std::exception,主要用于实现打印线程调用栈信息. ...
- [状压DP]P1441 题解 砝码称重
前置知识:状压DP 洛谷传送门 emm....看到题目,我第一个想到的就是枚举.暴力大法好! 具体怎么枚举?当然是子集枚举啦!枚举出每一个可能的砝码选择方案.对于每一个合法的(也就是选取数量等于\(n ...
- 2020重新出发,MySql基础,MySql字符集
目录 MySQL字符集和校对规则详解 MySQL字符集的转换过程 MySQL查看字符集和校对规则 MySQL设置默认字符集和校对规则 服务器字符集和校对规则 数据库字符集和校对规则 表字符集和校对规则 ...
- 阿里Java中级开发测试相关试题及答案
------------恢复内容开始------------ 1.JSP文件上传的HTML标签代码定义是? A. <input type="text" name=" ...
- UniRapidJson
https://github.com/takezoh/UniRapidJson 如何编译安卓 cd ~/UniRapidJson/build/android make 生成的so可以在 /Users/ ...
- Almost All Divisors(求因子个数及思维)
---恢复内容开始--- We guessed some integer number xx. You are given a list of almost all its divisors. Alm ...
- 模拟CMOS集成电路-单级放大器增益直观理解
我们再看辅助定理: 这里,Gm是指输出与地短接时的跨导:Rout表示当输入电压为零时的输出电阻.这个是书上的原话,但是在推算公式时发现,这两个量的定义还不是完全完整,我 的理解是: 首先Gm是等效跨导 ...
- 详细分析链表中的递归性质(Java 实现)
目录 链表中的递归性质 前言 LeetCode 上关于链表的一道问题 203 号题目 移除链表中的元素 递归的基本概念与示例 链表天然的递归性 小结 链表中的递归性质 前言 在前面的 链表的数据结构的 ...