Boy.scala

class Boy(val name: String, val faceValue: Int) extends Comparable[Boy]{
override def compareTo(o: Boy): Int = {
this.faceValue - o.faceValue
}
}

Girl.scala

class Girl(val name: String, val faceValue: Int, val size: Int) {

}

MissLeft.scala

//class MissLeft[T <% Ordered[T]] {
//
// def choose(first: T, second: T) : T = {
// if (first > second) first else second
// }
//
//} class MissLeft[T : Ordering] { def choose(first: T, second: T): T = {
val ord = implicitly[Ordering[T]]
if(ord.gt(first, second)) first else second
}
} object MissLeft {
def main(args: Array[String]) {
import MyPreDef.girlOrdering
val ml = new MissLeft[Girl]
val g1 = new Girl("hatanao", 98, 28)
val g2 = new Girl("sora", 95, 33)
val g = ml.choose(g1, g2)
println(g.name)
}
}

MissRight.scala

class MissRight[T] {

  def choose(first: T, second: T)(implicit ord : T => Ordered[T]): T = {
if(first > second) first else second
} def select(first: T, second: T)(implicit ord : Ordering[T]): T ={
if(ord.gt(first, second)) first else second
} def random(first: T, second: T)(implicit ord : Ordering[T]): T ={
import Ordered.orderingToOrdered
if(first > second) first else second
} } object MissRight {
def main(args: Array[String]) {
val mr = new MissRight[Girl]
val g1 = new Girl("hatanao", 98, 28)
val g2 = new Girl("sora", 95, 33) import MyPreDef.girlOrdering
//val g = mr.choose(g1, g2)
val g = mr.select(g1, g2)
println(g.name)
}
}

MyPreDef.scala

object MyPreDef {

  implicit def girlToOrdered(girl: Girl) = new Ordered[Girl]{
override def compare(that: Girl): Int = {
if(girl.faceValue == that.faceValue) {
girl.size - that.size
} else {
girl.faceValue - that.faceValue
}
}
} implicit object girlOrdering extends Ordering[Girl] {
override def compare(x: Girl, y: Girl): Int = {
if(x.faceValue == y.faceValue) {
x.size - y.size
} else {
x.faceValue - y.faceValue
}
}
}
}

MrRight.scala

class MrRight[T] {

  def choose[T <: Comparable[T]](first: T, second: T): T = {
if(first.compareTo(second) > 0) first else second
} } object MrRight {
def main(args: Array[String]) {
val mr = new MrRight[Boy]
val b1 = new Boy("zhangsan", 99)
val b2 = new Boy("lisi", 100)
val b = mr.choose(b1, b2)
println(b.name)
}
}

Scala使用隐式转换进行比较的更多相关文章

  1. scala自定义隐式转换

    Scala自定义隐式转换 一.编写隐式转换类 /** * Author Mr. Guo * Create 2019/4/20 - 17:40 */ object StringImprovments { ...

  2. Scala学习——隐式转换

    scala隐式转换 一.需求:为一个类添加一个新的方法 java:动态代理 scala:隐式转换 隐式转换例子: 1.man to superMan package top.ruandb.scala. ...

  3. 深入理解Scala的隐式转换系统

    摘要: 通过隐式转换,程序员可以在编写Scala程序时故意漏掉一些信息,让编译器去尝试在编译期间自动推导出这些信息来,这种特性可以极大的减少代码量,忽略那些冗长,过于细节的代码.   使用方式: 1. ...

  4. Scala模式匹配| 隐式转换

    1. 模式匹配 Scala中的模式匹配类似于Java中的switch语法,但是更加强大.模式匹配语法中,采用match关键字声明,每个分支采用case关键字进行声明,当需要匹配时,会从第一个case分 ...

  5. 转载:深入理解Scala的隐式转换系统

    摘要: 通过隐式转换,程序员可以在编写Scala程序时故意漏掉一些信息,让编译器去尝试在编译期间自动推导出这些信息来,这种特性可以极大的减少代码量,忽略那些冗长,过于细节的代码.   使用方式: 1. ...

  6. Scala之隐式转换

    概述 简单说,隐式转换就是:当Scala编译器进行类型匹配时,如果找不到合适的候选,那么隐式转化提供了另外一种途径来告诉编译器如何将当前的类型转换成预期类型. 隐式转换有四种常见的使用场景: 将某一类 ...

  7. Scala之隐式转换implicit详解

    假设我们有一个表示文本的行数的类LineNumber: class LineNumber ( val num : Int ) 我们可以用这个类来表示一本书中每一页的行数: val lineNumOfP ...

  8. Scala学习之路 (八)Scala的隐式转换和隐式参数

    一.概念 Scala 2.10引入了一种叫做隐式类的新特性.隐式类指的是用implicit关键字修饰的类.在对应的作用域内,带有这个关键字的类的主构造函数可用于隐式转换. 隐式转换和隐式参数是Scal ...

  9. 深入理解Scala的隐式转换

    摘要: 通过隐式转换,程序员可以在编写Scala程序时故意漏掉一些信息,让编译器去尝试在编译期间自动推导出这些信息来,这种特性可以极大的减少代码量,忽略那些冗长,过于细节的代码.   使用方式: 1. ...

  10. scala的隐式转换

    摘要: 通过隐式转换,程序员可以在编写Scala程序时故意漏掉一些信息,让编译器去尝试在编译期间自动推导出这些信息来,这种特性可以极大的减少代码量,忽略那些冗长,过于细节的代码.   使用方式: 1. ...

随机推荐

  1. UVa 10294 Arif in Dhaka (First Love Part 2) (Polya定理)

    题意:给定 n 和 m 表示要制作一个项链和手镯,项链和手镯的区别就是手镯旋转和翻转都是相同的,而项链旋转都是相同的,而翻转是不同的,问你使用 n 个珠子和 m 种颜色可以制作多少种项链和手镯. 析: ...

  2. 微信小程序之画布

    canvas 标签默认宽度300px.高度225px 同一页面中的 canvas-id 不可重复,如果使用一个已经出现过的 canvas-id,该 canvas 标签对应的画布将被隐藏并不再正常工作 ...

  3. silverlight 定时器 System.Windows.Threading.DispatcherTimer

    声明 System.Windows.Threading.DispatcherTimer _MessageControler; //刷新 _MessageControler = new System.W ...

  4. Hadoop-2.8.0分布式安装手册

    目录 目录 1 1. 前言 3 2. 特性介绍 3 3. 部署 5 3.1. 机器列表 5 3.2. 主机名 5 3.2.1. 临时修改主机名 6 3.2.2. 永久修改主机名 6 3.3. 免密码登 ...

  5. Shell编程-09-Shell中的函数

    目录 基本语法 函数执行 函数示例     函数可以简化程序的代码量,达到更好的代码复用度,因此会让程序变得更加易读.简洁和易修改.其作用就是将需要多次使用的代码整合到一块,使其成为一个整体,然后通过 ...

  6. Java案例:超市库存管理系统

    案例介绍: 模拟真实的库存管理逻辑,完成超市管理系统的日常功能实现,见下图 案例需求分析: 根据案例介绍,我们进行分析,首先需要一个功能菜单,然后输入功能序号后,调用序号对应的功能方法,实现想要的操作 ...

  7. 第一次Java实验

      模仿JavaAppArguments.java实例,编写一个程序,此程序从命令行接受多个数字,求和之后输出. 1.设计思路:命令行参数都是字符串,必须将其转化成数字才能相加,定义一个数组接收字符串 ...

  8. 使用Xshell在Windows系统和Linux系统之间进行文件传输

    版权声明:本文为转载内容. 原博客内容https://blog.csdn.net/love666666shen/article/details/75742077 Windows系统在安装虚拟机cent ...

  9. js获取元素下标

    <!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...

  10. java中JDK环境变量的配置

    JDK的配置在 window中的配置,我的电脑-->属性-->高级系统设置-->高级-->环境变量中配置,具体下图