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

本文涉及的产品
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 都会被搜索。

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

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8月前
|
安全 测试技术 Python
详解增强算术赋值:“-=”操作是怎么实现的?
详解增强算术赋值:“-=”操作是怎么实现的?
50 2
|
8月前
|
开发框架 安全 编译器
【C/C++ 深入探讨构函数】C++ 编译器在什么情况下无法生成默认的析构函数?
【C/C++ 深入探讨构函数】C++ 编译器在什么情况下无法生成默认的析构函数?
174 1
|
8月前
|
存储 安全 编译器
C/C++陷阱——临时变量的产生和特性
C/C++陷阱——临时变量的产生和特性
|
存储 编译器 C++
c++ 有趣的动态转换之 delete 崩溃探究兼谈基类虚析构的重要性
c++ 有趣的动态转换之 delete 崩溃探究兼谈基类虚析构的重要性
feof用法重点详解(易被误用判断文件结束!!!)
feof用法重点详解(易被误用判断文件结束!!!)
|
Java
Java多态的本质—动态分派
Java多态的本质—动态分派
124 0
Java多态的本质—动态分派
|
Java
深入理解Java中方法的参数传递机制
Java中到底是值传递or引用传递?
4048 0
|
数据可视化 Java Python
join()方法的神奇用处与Intern机制的软肋
照例先总结下本文内容:(1)join() 方法除了在拼接字符串时速度较快,它还是目前看来最通用有效的复制字符串的方法 (2)Intern 机制(字符串滞留)并非万能的,本文探索一下它的软肋有哪些
164 0
join()方法的神奇用处与Intern机制的软肋
|
数据采集 Linux Python
再谈文件读写:判断文件的几种方法及其优劣对比
学习是循序渐进的过程,若能建立知识点间的联系,进行系统性的学习,那将更有助于效果。阅读这篇文章,你将读到如下内容: 1、判断文件的方法(try语句、os模块、pathlib模块)2、以上几种方法的优劣对比
197 0

热门文章

最新文章