Scala中的隐式转换、隐式参数和隐式类

隐式转换是scala中一个非常重要的概念,在scala中到处可见,

隐式转换

先看代码:

class Info

class RichInfo(info: Info) {  
  def show {
    println("RichInfo ...")
  }
}

object Test extends App {  
  implicit def info2Rich(info: Info) = new RichInfo(info)

  val info = new Info
  info.show
}

输出:

RichInfo ...

info对象本身没有show方法,在info上下文中,定义了一个隐式方法,scala编译器会自动调用此方法将info转换为RichInfo,然后就可以调用show方法了。

隐式参数

object Test extends App {  
  def testImplicit(implicit name: String) { println(name) }
  implicit val name = "test implicit..."

  testImplicit
  testImplicit("Test ...")
}

输出:

test implicit...  
Test ...  

隐式类

object Test extends App {

  implicit class Calc(i: Int) {
    def show { println(i) }
  }

  5.show
}

输出

5

隐式类在原理上其实就是在创建类的同时构建了一个与主构造器同名的隐式函数。

注意:隐式类不能定义成为顶级对象。