Scala 之隐式转换函数(十)

隐式转换函数

  • 定义:以implicit关键字声明
  • 作用:丰富现有类库的功能,对类的方法进行增强
package functionDemo

/**
  * 隐式转换函数是指在同一个作用域下面,
  * 比如下面m1与m2函数在不进行转换之前只接收int类型,display默认只能接收string类型。
  * 当添加了隐式转换函数后,在对m1与m2传入类似数字模式的string类型时,
  * 则自动调用将string类型转换成int,也就是说隐式函数会被方法自动进行隐式调用。
  * 如下的display函数与其相关的隐式转换函数
  * 一个给定输入类型并自动转换为指定返回类型的函数,
  * 这个函数和函数名字无关,和入参名字无关,
  * 只和入参类型以及返回类型有关。注意是同一个作用域。
  *
  */

object ImplicitFunc {

  // 当只传入x参数时,则采用默认的y=10进行运算,如果传入两个参数则以传入的为参数为主
  def m1(x: Int)(implicit y: Int = 10) = x * y

  def m2(x: Int)(z: Int)(implicit y: Int = 5) = x + y + z

  // 定义一个接收string类型的函数
  def display(str: String) = println(str)

  // 对display方法进行隐式转换,让其可接受非string类型参数
  implicit def tranInt2Str(x: Int) = (x * x).toString

  implicit def tranBoolean2Str(b: Boolean) = if (b) "true" else "false"

  //将String类型转换成int
  //  implicit def tranStr2Int(str: String) = Integer.parseInt(str)

  //也可通过调用其他类中对应的方法,将String类型转换成int
  import ConstantFunc.tranStr2Int

  // 注意:像这里定义了一个将boolean类型的数据转换成str的函数,结果运行出错,那是因为上面也有同样效果的函数了,这时编译器会出现不知调用那个而抛出异常
  //  implicit def tranBoolean2Str2(b : Boolean) = if (b) "true" else "false"

  def main(args: Array[String]): Unit = {
    println("m1传一个参数:" + m1("2"))
    println("m1传两个参数:" + m1(10)(2))

    println(m2("10")(90))

    display(12) // 144
    val flag: Boolean = true
    display(flag) // true
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值