Scala的隐式转换

一:

1.隐式转换概述:

隐式转换与模式匹配都是scala中提供的比较强大的特性。

2.隐式转换的定义:

在实际编程中,要想把一个不匹配的类型赋值,需要先转换成匹配的类型。scala的隐式转换会自动将一种类型的数据转换成另一种类型。隐式转换就是scala自动转换。对于户编程而言不可见,不需要手动编写转换代码。

3.scala隐式转换声明

scala的隐式转换声明关键字为implicit

package test10

object test10_4 {
  class StrongString(str: String) {
    def isPhone(str: String): Boolean = {
      val reg = "1[3-9]\\d{9}".r
      reg.matches(str)
    }
    def isEmail:Boolean={
      val reg="r"
      reg.matches(str)
    }
  }
  implicit def strongString(str:String):StrongString ={
    new StrongString(str)
  }
  def main(args: Array[String]): Unit = {
    val str: String = "13239612335"

  //需求:给字符串补充一个功能,isPhone。判断它是不是一个手机号码

  val rs = str.isPhone
//  val rs = (new StrongString(str)).isPhone
//      val rs = stringtoStrongString(str).isPhone
  println(s"$str 的检查结果是:$rs")
}
}
package test10

//隐式值
object test10_3 {

  //函数的默认参数
   //函数的默认参数:小花
    def sayName(implicit name:String="小花"):Unit ={
      println(s"我叫:$name")
    }

  //需求更 改函数的默认值(不传入这个值的时候,用到的值),不要写死
  //步骤:
  //1.定义函数的默认参数时,添加implicit
  //2.需要修改这个默认值时,定义一个同类型的隐式值:implicit 修改变量

  implicit val xxx: String = "小明明"

//  implicit val defaultValue:String="小明"

    def main(args: Array[String]): Unit = {
    sayName("无敌小旋风")

    sayName

    sayName//小明
  }

}
package test10
//潜规则:老代码不要改!!!可以加新代码
object test10_2 {
//小明
    def getAge():Double ={
      19.5
    }
    //implicit 隐式转换
    //函数名字不重要
    //重要的是:参数类型和返回值类型!!!

  //隐式函数:implicit修饰的函数
  //特点:1.自动被调用 2.函数名字不重要,重要的是,参数类型和返回值类型!
  implicit def abc(d:Double):Int ={
    d.toInt
  }
  //小花
  def main(args: Array[String]): Unit = {
//    val i :Int = doubleToInt(getAge())
    val i:Int = getAge()
    println(i)
  }

}
package test10

object test10_5 {
  class StrongString(val str:String){
    def isPhone():Boolean={
      val reg = "1[3-9]\\d{9}".r
      reg.matches(str)
    }
    //验证是否身份证号
    def isID:Boolean ={
      val reg ="".r
      reg.matches(str)
    }
  }
  //定义一个特殊的转换函数,把str ===> StrongString的对象
  implicit def xxxx(str:String):StrongString ={
//  println("偷偷调用implicit")
  new StrongString(str)
}

  def main(args: Array[String]): Unit = {
    println("136a".isPhone())
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值