当前位置: 首页 > news >正文

Scala的隐式转换

(一)隐式转换: 编译器 偷偷地,自动地帮我们把一种数据类型转换为另一种类型。例如:int --> double
它有失败的时候(double-->int),有成功的时候。
当它转换失败的时候,我们提供一个工具,让它能成功

(二)函数的隐式参数:

    一直在修改原来的代码!!!

    困难:函数有一个默认参数值,在不传入具体的实参时,就会自动使用这个默认值。

                难点在于,这个默认值不能修改!


object Test48 {//函数参数的默认值def sayName(implicit name:String="小东"):Unit={println("我的名字是:"+ name)}//隐式值implicit val value:String="小张"def main(args: Array[String]): Unit = {sayName("小王")sayName()sayName}}

(三)隐式类:

    任务:给之前的BaseUser添加新的功能,但是,不要直接去改代码

     思路:把BaseUser 通过隐式转换,改成一个新类型,而这个新类型中有这新的方法。

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

     它的作用:拓展已有类的功能,而不需要去修改之前的类的代码

object Test49 {implicit class PowerUser(b:BaseUser){def updateUser(){println("updateUser")}}//  def transform(b:BaseUser) : PowerUser={
//    new PowerUser()
//  }//10 年,小王的写的代码class BaseUser{def showUser():Unit={println("showUser")}}def main(args: Array[String]): Unit = {val u1=new BaseUser()u1.showUser()u1.updateUser()}
}

(四)隐式对象:

package test39
import  scala.language.postfixOps
// 需求:给整数添加一个功能,求阶乘
// 5! = 1*2*3*4*5 = 120object Test1 {implicit class XXXXX(d: Int) {def ! : Int = {println("阶乘函数被调用", d)120 // 写代码,完成1*2*3*...*d}}def main(args: Array[String]): Unit = {println(5.!)println(6!)}
}
object Test50 {implicit class XXXXX(d: Int){def ! : Int={println("阶乘函数被调用",d)// 写代码,完成1*2*3*...*dvar rs=1for (i<-1 to d){rs *= i}rs}}
}
  case class DatabaseConfig(driver:String,url:String)//作为函数的隐式参数的默认值implicit object MySqlDefault extends DatabaseConfig("mysql","localhost:443")def grtConn(implicit config:DatabaseConfig):Unit={println(config )}def main(args: Array[String]): Unit = {grtConn}


http://www.mrgr.cn/news/79786.html

相关文章:

  • 遗传算法与深度学习实战(27)——进化卷积神经网络
  • 【C++】右值引用与移动语义详解:如何利用万能引用实现完美转发
  • kafka进阶_4.kafka扩展
  • Electron-Vite 项目搭建(Vue)
  • ctfshow-web 151-170-文件上传
  • 前端使用 Cursor 的最佳助手 - PromptCoder
  • 服务器---centos上前端从0到1配置项目部署
  • 优秀前端文章笔记----持续更新
  • Hash、HASHTABLE底层原理【Redis对象篇】
  • 杨振宁大学物理视频中黄色的字,c#写程序去掉
  • MySQL-DQL之数据多表操作
  • [Web]域对象
  • Ubuntu压缩打包解压
  • 【工业机器视觉】基于深度学习的水表盘读数识别(3-数据标注与转换)
  • 软错误防护技术在车规MCU中应用
  • PDF处理的创新工具:福昕低代码平台尝鲜实现PDF2word功能
  • Docker学习笔记
  • sheng的学习笔记-AI-序列模型(Sequence Models),RNN,GRU,LSTM
  • 力扣hot100道【贪心算法后续解题方法心得】(三)
  • Freertos任务切换
  • 为什么按需学习效率更高?
  • TCP 2
  • qwen2.5 模型JSON格式化输出案例
  • VMware Workstation Pro 17 下载 以及 安装 Ubuntu 20.04.6 Ubuntu 启用 root 登录
  • UnityShaderLab-实现沿y轴溶解效果
  • 【数据结构】基数排序的原理及实现