imp

18 阅读1分钟
package imp

object imp03 {
  // 1 美元 = 6.9人民币
  // 1 人民币 = 0.14美元

  class MY(var value:Double) {
    override def toString: String = s"${value}美元"
  }

  class RMB(var value:Double) {
    override def toString: String = s"${value}人民币"
  }

  implicit def my2Rmb(my: MY): RMB = {
    // 按照1美元=6.9人民币的汇率计算转换后金额
    new RMB(my.value * 6.9)
  }


  implicit def rmb2My(rmb: RMB): MY = {
    // 按照1人民币=0.14美元的汇率计算转换后金额
    new MY(rmb.value * 0.14)
  }


  def main(args: Array[String]): Unit = {
    // 利用隐式函数my2Rmb,自动将MY类型转换为RMB类型
    val m1: RMB = new MY(100) // 此处无需显式写 : MY,隐式转换会自动触发
    println(m1) // 输出:690.0人民币(100美元 * 6.9 = 690人民币)

    // 可选测试:人民币转美元
    val m2: MY = new RMB(100)
    println(m2) // 输出:14.0美元(100人民币 * 0.14 = 14美元)
  }
}