当隐式def tupleOrderingDesc:Ordering [Tuple2 [String,Int]]将被触发

时间:2019-04-16 14:29:32

标签: scala

当我阅读代码时,发现下面的函数,这是一个隐式函数,但是似乎没有该函数的输入。总是,隐式函数将是这样的: 隐式def int2Fraction(n:Int)=分数(n,1) 此函数会将Int转换为小数。 但是对于下面的代码,它是如何工作的?隐式转换何时发生?

implicit def tupleOrderingDesc:Ordering[Tuple2[String,Int]] = {
      new Ordering[Tuple2[String, Int]] {
        override def compare(x: (String, Int), y: (String, Int)): Int = {
          if (y._1.compare(x._1) == 0) y._2.compare(x._2)
          else y._1.compare(x._1)
        }
      }
    }

1 个答案:

答案 0 :(得分:2)

隐式函数(类型,函数)在调用具有这种隐式类型作为隐式参数的函数时立即应用。因此,当需要指定类型Tuple2 [String,Int]的Ordering时(例如在进行比较,排序时),将应用上述内容。

更详细的讨论可以在这里找到: Easy idiomatic way to define Ordering for a simple case class

以及一般的隐式,包括订购: https://docs.scala-lang.org/tutorials/FAQ/finding-implicits.html