Implicit Conversions (隐式转换)
隐式转换在构建类库时是一个强大的工具。
使用隐式转换特性需要在编译时添加-language:implicitConversions
选项。
定义隐式转换
Scala是强类型语言,不同类型之间的变量默认不会自动进行转换。
若需要提供类型之间的自动转换功能,需要显式使用implicit
关键字自定义隐式转换。
隐式转换可以定义在当前类中或是伴生对象中,只要需要进行转换时能被访问到即可。
当传入参数的类型与函数需要的类型不同时,编译器便会查找是否有合适的隐式转换,如下所示:
class Implicit(val num: Int)
object Implicit {
implicit def implToInt(impl: Implicit) = impl.num
def apply(num: Int) = new Implicit(num)
}
object Main extends App {
implicit def implToStr(impl: Implicit) = impl.num.toString
def showNum(num: Int) = println(num)
def showStr(str: String) = println(str)
showNum(Implicit(100))
showStr(Implicit(200))
}
当访问一个实例不存在的成员时,编译器也会查找是否存在隐式转换,能将其转化为拥有此成员的类型,如下所示:
class Implicit(val num: Int) {
def show = println(num)
}
object Implicit {
implicit def intToImpl(num: Int) = new Implicit(num)
}
object Main extends App {
<