• Scala使用隐式转换进行比较


     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)
      }
    }
  • 相关阅读:
    【干货】如何5分钟内解决实时输入仿真(超简单)
    我们不生产bug,我们只是算法的搬运工——OO第一次作业(踩雷)总结
    OO助教总结
    oo第四次总结作业
    oo第三次总结性作业
    OO第二次总结性作业
    oo第四次作业
    C++学习记录二:
    长沙.NET社区之光
    课程总结
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/6736954.html
Copyright © 2020-2023  润新知