===== 隐式参数 ===== 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) } }