欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > Scala-隐式转换

Scala-隐式转换

2024/12/22 16:43:22 来源:https://blog.csdn.net/2301_82251033/article/details/144183900  浏览:    关键词:Scala-隐式转换

系统自动完成的:把一种类型的数据转成了另一种类型的数据。

不是所有的类型都可以执行隐式转换

函数的参数类型 和 返回值类型是重要的,它约定了把什么类型转成什么类型

//张三的函数def getAge():Double={8.5}//函数名:tranform 不重要//函数的参数类型 和 返回值类型是重要的,它约定了把什么类型转成什么类型implicit def tranform11111(d:Double): Int = {println("implicit 被调用了")d.toInt}//小花def main(args: Array[String]): Unit = {val i:Int = 1val d:Double = i //int -> doubleval  age:Int = getAge()println("今年",age)}

sayName

object Test_sayName {//给参数设置一个默认值:如果用户不传入,就使用这个值def sayName(implicit name:String = "小花"):Unit={println(s"我叫:$name")}//隐式值:能够自己设置函数的参数默认值,而不是在代码中固定写死//需求:能够自己设置函数的参数默认值//1.在函数的默认参数前面补充关键字:implicit//2.在定义变量的前面 补充关键字: implicit//3.调用函数时,不加()implicit val x: String = "小李"def main(args: Array[String]): Unit = {sayName
//    sayName("小明")
//
//    sayName()}}

判断手机号码

需求:让字符串增加一个功能:isPone() 检查当前字符串是否是一个合格的手机号码
 

object Test_隐式sayName2 {def main(args: Array[String]): Unit = {//定义一个函数,用来检测输入的字符串是否是一个手机号def isPone(str:String):Boolean={//1.定义一个正则val reg = "1[3-9]\\d{9}".r// 2.reg.matches(str)reg.matches(str)}println(isPone("1346824y5973"))}}

隐式对象

object Test_隐式对象 {case class DatabaseConfig(driver:String,url:String)//隐式对象//格式:就是在对象前面加一个implicit//作用:给函数当默认值implicit object MySqlConfig extends DatabaseConfig(driver="mysql.jdbc",url="localhost:3306")//定义一个连接数据库的函数def getCon (implicit config: DatabaseConfig): Unit = {println(config)}def main(args: Array[String]): Unit = {println(MySqlConfig)getCon//使用默认值getCon(DatabaseConfig("sqlite","localhost"))//使用自己定义的值}
}

隐式类

隐式类 == 一个类 + 一个隐式转换函数

格式:在class的前面,添加implicit

要点:要有一个参数,就要待被转换的类型,返回的类型就是当前的类

object Test_隐式类{// implicit class A{ }implicit class X(s:String){println("构造器被调用了...")def testabc:Unit = {println("abc......",s)}}def main(args: Array[String]): Unit = {"abcddd".testabc}
}

计算阶乘

object Test_隐式例 {implicit class X(d:Int){def !(): Int = {var rs = 1//println(d)//计算d*d-1*d-2*d-3……*1for (i <- 1 to d) {rs *= i}rs}}def main(args: Array[String]): Unit = {//5! =5*4*3*2*1 =120//var rs =5.!// 5! ===5.!*()println(5.!)}
}

作用域

1.不能放在顶层

2.可以放在包对象中。在整个包下都可以访问

3.可以放在任意某个文件中:在需要的地方导入,使用

import scala_mianx.Test_隐式转换.Test_隐式例.Ximport scala.language.postfixOps
object 作用域 {def main(args: Array[String]): Unit = {println(5!)}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com