用户工具


隐式参数

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)

  }
}