scala中的隐式类型转换

本文通过创建Fraction类演示了Scala中隐式转换的使用方法,包括如何定义隐式转换及如何利用伴生对象实现自动类型转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写一个类测试一下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)

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值