您的位置:首页 > 其它

scala中的隐式类型转换

2017-11-13 22:20 148 查看
写一个类测试一下Scala中的隐式转换的用法:

class Fraction(n: Int, d: Int) {
//  def den = d
private val den = d;
//  def num = n 类参数定义为方法或字段都可以
private val num = n;

//  定义乘法
def *(other: Fraction) = Fraction(other.num * this.num, other.den * this.den)
//  重写toString
override def toString() = s"$num / $den"
}
//伴生对象
object Fraction {
//  implicit隐转 方法名无关可以随意改,自动调用
implicit def int2Fraction(n: Int) = Fraction(n, 1)

def apply(n: Int, d: Int) = {
new Fraction(n, d)
}

def unapply(frac: Fraction) = if (frac.den == 0) None else Some((frac.num, frac.den))
}

object TestFrac extends App{
//  3 隐式调用了int2Fraction方法被转化为一个Fraction对象Fraction(3,1)

val result = 3 * Fraction(4,5)
//  也可以显示调用
val result2 = Fraction.int2Fraction(5) * Fraction(3,4)
println(result)
//  unapply
val Fraction(num,den) = result
println(num,den)

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息