Scala:隐式转换

隐式转换的定义

//隐式转换:编译器自动滴,偷偷滴,把数据A->B
object test04 {
  def main(args: Array[String]): Unit = {
    val i:Int=1
    //把Int类型,转化成Double类型
    //Int -> Double
    //隐式转换失败
    val b:Double=1
    //隐式转换失败
    val d:Double=1.2
    val j:Int=d
  }
}

object test05 {
  def main(args: Array[String]): Unit = {
    //小明
    def getAge():Double={
      19.5
    }
    
    implicit def abc(d:Double):Int={
      d.toInt
    }
    //implicit  隐式转换
    //函数
    def main(args: Array[String]): Unit = {
//      val i:Int=doubleToInt(getAge())
      val i:Int=getAge()
      println(i)
    }
  }
}

隐式值

//隐式值
object test06 {
  //函数的默认参数
  //函数的默认参数值:小花
  def sayName(implicit name:String="小花"):Unit={
    println(s"我叫:$name")
  }
  //需求:更改函数参数的默认值(不传入这个值的时候,用到的值),不要写死
  //步骤:
  //1.定义函数的默认值时,添加implicit
  //2.需要修改这个默认值是,定义一个同类型的 隐式值:implicit 修饰变量
  implicit val xxx:String="小明"
  def main(args: Array[String]): Unit = {
    sayName("无敌小旋风")
    sayName
    sayName
  }
}

给字符串添加新的功能 

object test07 {
  //目标:给字符串添加新的功能
  //用到了:implicit 函数+普通类StrongString
  implicit class StrongString(str:String) {
    def isPhone: Boolean = {
      val reg = "1[3-9]\\d{9}".r
      reg.matches(str)
    }
  }
//  implicit def stringtoStrongString(str:String):StrongString={
//    new StrongString(str)
//  }

  def main(args: Array[String]): Unit = {
    val str:String="13612345678"

    //要求:给字符串补充一个功能 isPhone,判断它是不是一个手机号码
    val rs=str.isPhone
//    val rs=(new StrongString(str))isPhone
//      val rs=stringtoStrongString(str).isPhone
    println(s"$str 的检查结果是:$rs")
  }
}

 

 给所有整数添加新功能

import scala.language.postfixOps
//给所有的整数添加新功能
//1.判断是否偶数
//2.阶乘。5!=5*4*3*2*1=120
object test10 {
  implicit class XXX(d:Int){
    def isEven:Boolean={
      d % 2 == 0
    }
    //补充一个求阶乘的函数。函数的名称就是i
    def ! : Int={
      var rs = 1
      for(i<-1 to d){
        rs *= i
      }
      rs
    }
  }
  def main(args: Array[String]): Unit = {
    println(10.isEven)//true
    println(9.isEven)//false
    println(5!)//120
    println(5.!)//120
    println(10!)//3628800
  }
}

 

隐式对象

//隐式对象
//格式:implicit object
//作用:给函数的默认参数提供隐式值
object test11 {
  case class DataBase(driver:String,url:String)
  implicit object mySql extends DataBase("mySql","localhost:300")
  def getConn(implicit config:DataBase):Unit=
    println(config)
  def main(args: Array[String]): Unit = {
//    println()
    getConn(DataBase("sqlite","localhost:80"))
    getConn//采用默认值
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值