隐式转换的时机和机制|学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 快速学习隐式转换的时机和机制。

开发者学堂课程【Scala 核心编程-基础:隐式转换的时机和机制】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/609/detail/9011


隐式转换的时机和机制

 

内容介绍

隐式的转化时机

、隐式解析机制

 

一、隐式的转化时机

1、当方法中的参数的类型与目标类型不致时,会产生隐式转换

2、当对象调用所在类中不存在的方法或成员时,编译器会自动将对象进行隐式转换(根据类型)。

3、假如没有 mySQL . addSuffix( )那么 new mySQL1不会跟 DB1发生关联消息但是 sayok()没有下划线addsuffix()有下划线编译器扫描 mySQL 的作用域发现有一个隐式类可以用

//创建一个 MySQL1实例

val mySQL = new MySQL1

mySQL . sayOk( )

mySQL.addsuffix() //研究如何关联到 DB1$I (mySQL). addsuffix();

4、当方法中的参数的类型与目标类型不致时也会转换

implicit def f1(d: Double)int={接收 double 类型

d.toint

}

Def test1(n1: Int): Unit={

println("ok'

}

Test1(10.1)理论上报10是对的但是报1就错了类型不匹配隐式类型会出现在范围内去找找到就会用找不到就报错

赋值的本质底层也可能是一个函数

}

}

class DB1{}

成功运行

5、整理

(1)当方法中的参数的类型与目标类型不致时,或者是赋值时。

implicit def f1(d:Double): Int = {

d. toInt

}

def test1(n1:Int): Unit = {

println("ok")

}

test1(10.1 )

(2)当对象调用所在类中不存在的方法或成员时,编译器会自动将对象进行隐式转换(根据类型)


二、隐式解析机制

即编译器是如何查找到缺失信息的,解析具有以下两种规则:

1、首先会在当前代码作用域下查找隐式实体(隐式方法、隐式类、隐式对象)(一般是这种情况)。

2、如果第一条规则查找隐式实体失败,会继续在隐式参数的类型的作用域里查找。类型的作用域是指与该类型相关联的全部伴生模块,一个隐式实体的类型T它的查找范围如下(第二种情况范围广且复杂在使用时,应当尽量避免出现第二种情况):

(1)如果 T 被定义为 T with A with B with C,那么 A,B,C 都是 T 的部分,在 T 的隐式解析过程中,它们的伴生对象都会被搜索。

(2)如果 T 是参数化类型,那么类型参数和与类型参数相关联的部分都算作T的部分,比如 List[String]的隐式搜索会搜索 List 的伴生对象和 String 的伴生对象。

(3)如果T是一个单例类型 p.T,即 T 是属于某个 p 对象内,那么这个 p 对象也会被搜索。

(4)如果 T 是个类型注入 S#T,那么 S 和 T 都会被搜索。

主要是第一种要了解第二种直到即可正常情况下不会用这么复杂的解析

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
存储 编译器 C语言
【C/C++ 函数返回的奥秘】深入探究C/C++函数返回:编译器如何处理返回值
【C/C++ 函数返回的奥秘】深入探究C/C++函数返回:编译器如何处理返回值
648 3
|
7月前
|
安全 测试技术 Python
详解增强算术赋值:“-=”操作是怎么实现的?
详解增强算术赋值:“-=”操作是怎么实现的?
42 2
|
7月前
|
存储 安全 编译器
C/C++陷阱——临时变量的产生和特性
C/C++陷阱——临时变量的产生和特性
|
7月前
|
安全 编译器 C#
C#中的可空引用类型:减少空引用异常的利器
【1月更文挑战第9天】C# 8.0中引入的可空引用类型特性,它通过在编译时提供更精确的静态分析,帮助开发者减少运行时的空引用异常。文章详细阐述了可空引用类型的工作原理、如何配置项目以使用此特性,以及在实际编码中如何利用可空引用类型提升代码的健壮性和可读性。
|
编译器 C++
2022 VS编译器如何实现监视
2022 VS编译器如何实现监视
|
程序员 Scala 开发者
函数(方法)的调用机制|学习笔记
快速学习函数(方法)的调用机制。
函数(方法)的调用机制|学习笔记
|
网络协议 测试技术 Go
方法的调用和传参机制 | 学习笔记
快速学习方法的调用和传参机制
方法的调用和传参机制 | 学习笔记
|
Java
深入理解Java中方法的参数传递机制
Java中到底是值传递or引用传递?
4009 0
|
存储 Java 编译器
函数调用机制底层剖析 | 学习笔记
简介:快速学习函数调用机制底层剖析
128 0
|
Java 编译器 C语言
C++中尽量少做类型转换动作
C++中尽量少做类型转换动作
302 0