implicit 可分为三种 隐式参数 隐式转换类型 隐式调用函数
1、隐式参数
implicit参数都是定义在方法最后,修饰implicit表示该组参数是隐式参数。一个方法只会有一个隐式参数列表,置于方法的最后一个参数列表。如果方法有多个隐式参数,只需一个implicit修饰即可
//使用隐式参数的方式 需要在外部定义一个Comparator[A]类型的变量
def maxThrid[A](first: A, second: A)(implicit cp: Comparator[A]) = {
if (cp.compare(first, second) > 0) first else second
}
//使用implicitly方法
//implicitly是在Predef.scala里定义的,它是一个特殊的方法,编译器会记录当前上下文里的隐式值,而这个方法则可以获得某种类型的隐式值
def maxOne[A: Comparator](first: A, second: A) = {
val cp = implicitly[Comparator[A]]
if (cp.compare(first, second) > 0) first else second
}
//在内部定义函数并声明隐式参数,这种做法只是把外部方法的隐式参数隐藏了,放到内部嵌套函数上
def maxTwo[A: Comparator](first: A, second: A) = {
def inner(implicit cp: Comparator[A]) =