当我阅读代码时,发现下面的函数,这是一个隐式函数,但是似乎没有该函数的输入。总是,隐式函数将是这样的: 隐式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)
}
}
}
答案 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