隐式转换
- 隐式转换函数( implicit conversion function )指的是那种以 implicit关键字声明的带有单个参数的函数。这样的函数将被自动应用,将值从一种类型转换为另一种类型 。
- 例如Fraction类,将整数n转换为Fraction(n,1),使用implicit def int2Fraction(n:Int)= Fraction(n,1)
class Fraction (n:Int,d:Int){
private var num = n
private var den = d
def this(x:Int,n:Int, d:Int){
this(n,d)
num = x * d + n
}
def *(other:Fraction):Fraction={
new Fraction(num*other.num,den*other.den)
}
override def toString: String = s"${num}/${den}"
}
object Fraction{
def apply(n: Int, d: Int): Fraction = new Fraction(n, d)
def apply(x:Int,n: Int, d: Int): Fraction = new Fraction(x,n, d)
}
object Chapter21 extends App{
implicit def int2Fraction(n:Int)= Fraction(n,1)
println(4 * Fraction(3,4))
}
- 隐式转换函数可能会被显示引入,函数的命名使用source2Target这种命名
- 使用import scala.language.implicitConversions避免警告
利用隐式转换丰富现有类库的功能
import java.io.File
import scala.io.Source
class RichFile(val from:File){
def read = Source.fromFile(from.getPath).mkString
}
implicit def file2RichFile(from:File) = new RichFile(from)
val a = new File("D:\\data\\shui.txt").read
println(a)