Scala的隐式转换

[复制链接]
发表于 2025-12-9 18:09:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一:
1.隐式转换概述:
隐式转换与模式匹配都是scala中提供的比力强盛的特性。
2.隐式转换的界说:
在实际编程中,要想把一个不匹配的范例赋值,须要先转换成匹配的范例。scala的隐式转换会主动将一种范例的数据转换成另一种范例。隐式转换就是scala主动转换。对于户编程而言不可见,不须要手动编写转换代码。
3.scala隐式转换声明
scala的隐式转换声明关键字为implicit
  1. package test10
  2. object test10_4 {
  3.   class StrongString(str: String) {
  4.     def isPhone(str: String): Boolean = {
  5.       val reg = "1[3-9]\\d{9}".r
  6.       reg.matches(str)
  7.     }
  8.     def isEmail:Boolean={
  9.       val reg="r"
  10.       reg.matches(str)
  11.     }
  12.   }
  13.   implicit def strongString(str:String):StrongString ={
  14.     new StrongString(str)
  15.   }
  16.   def main(args: Array[String]): Unit = {
  17.     val str: String = "13239612335"
  18.   //需求:给字符串补充一个功能,isPhone。判断它是不是一个手机号码
  19.   val rs = str.isPhone
  20. //  val rs = (new StrongString(str)).isPhone
  21. //      val rs = stringtoStrongString(str).isPhone
  22.   println(s"$str 的检查结果是:$rs")
  23. }
  24. }
复制代码
  1. package test10
  2. //隐式值
  3. object test10_3 {
  4.   //函数的默认参数
  5.    //函数的默认参数:小花
  6.     def sayName(implicit name:String="小花"):Unit ={
  7.       println(s"我叫:$name")
  8.     }
  9.   //需求更 改函数的默认值(不传入这个值的时候,用到的值),不要写死
  10.   //步骤:
  11.   //1.定义函数的默认参数时,添加implicit
  12.   //2.需要修改这个默认值时,定义一个同类型的隐式值:implicit 修改变量
  13.   implicit val xxx: String = "小明明"
  14. //  implicit val defaultValue:String="小明"
  15.     def main(args: Array[String]): Unit = {
  16.     sayName("无敌小旋风")
  17.     sayName
  18.     sayName//小明
  19.   }
  20. }
复制代码
  1. package test10
  2. //潜规则:老代码不要改!!!可以加新代码
  3. object test10_2 {
  4. //小明
  5.     def getAge():Double ={
  6.       19.5
  7.     }
  8.     //implicit 隐式转换
  9.     //函数名字不重要
  10.     //重要的是:参数类型和返回值类型!!!
  11.   //隐式函数:implicit修饰的函数
  12.   //特点:1.自动被调用 2.函数名字不重要,重要的是,参数类型和返回值类型!
  13.   implicit def abc(d:Double):Int ={
  14.     d.toInt
  15.   }
  16.   //小花
  17.   def main(args: Array[String]): Unit = {
  18. //    val i :Int = doubleToInt(getAge())
  19.     val i:Int = getAge()
  20.     println(i)
  21.   }
  22. }
复制代码
  1. package test10
  2. object test10_5 {
  3.   class StrongString(val str:String){
  4.     def isPhone():Boolean={
  5.       val reg = "1[3-9]\\d{9}".r
  6.       reg.matches(str)
  7.     }
  8.     //验证是否身份证号
  9.     def isID:Boolean ={
  10.       val reg ="".r
  11.       reg.matches(str)
  12.     }
  13.   }
  14.   //定义一个特殊的转换函数,把str ===> StrongString的对象
  15.   implicit def xxxx(str:String):StrongString ={
  16. //  println("偷偷调用implicit")
  17.   new StrongString(str)
  18. }
  19.   def main(args: Array[String]): Unit = {
  20.     println("136a".isPhone())
  21.   }
  22. }
复制代码

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表