===== 隐式参数 =====
object main {
def main(args: Array[String]) {
implicit val a=1
def f(x:Int)(implicit y:Int)={x+y} // 自动搜索当前作用域内Int类型的隐式参数
println(f(1))
println(f(1)(2))
}
}
结果:
2
3
===== 隐式转换 =====
==== 触发条件 ====
* 调用某个不存在的方法或属性时
* 类型不匹配
==== 不会触发情况 ====
* 如果不使用隐式转换也能通过编译
* 不会尝试多次隐式转换
* 隐式转换函数有二义性(有多个隐式转换函数都能匹配)
class f(var a:Int){
def +(v:f)={a+v.a}
}
object main {
def main(args: Array[String]) {
implicit def asdf(i:Int) = new f(i) // 定义一个 int => f() 的隐式转换函数。(隐式函数的使用范围越小越好,避免不必要的隐式转换)
var a=new f(1)
println(a+1) // 自动调用隐式函数将1转换成f(1)
}
}