package ce.scala.zhong
class Pair_Implicits[T:Ordering](val first:T, val second : T){
def bigger(implicit ordered:Ordering[T]) = { //存在一个隐式值ordered
if(ordered.compare(first, second) > 0) first else second
}
}
class Pair_Implicitly[T:Ordering](val first : T, val second : T){
def bigger = if(implicitly[Ordering[T]].compare(first, second) > 0) first else second //implicitly提取出运行时上下文界定的实例
}
class Pair_Implicitly_Ordered[T : Ordering](val first : T, val second : T){
def bigger = {
import Ordered._
if(first > second) first else second //first和second由Ordering隐式转换成Ordered
}
}
object Context_Bounds_Internals_62 {
def main(args: Array[String]): Unit = {
println(new Pair_Implicits(7,9).bigger)
println(new Pair_Implicitly(7,9).bigger)
println(new Pair_Implicitly_Ordered(7,9).bigger)
}
}
输出:
9
9
9
参考资料来源于大数据梦工厂 深入浅出scala 第62讲 由王家林老师讲解