对象匹配基本介绍和快速入门 | 学习笔记

简介: 快速学习对象匹配基本介绍和快速入门

开发者学堂课程【Scala 核心编程 - 进阶对象匹配基本介绍和快速入门学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/610/detail/9076


对象匹配基本介绍和快速入门


对象匹配基本介绍

1.基本介绍

对象匹配,什么才算是匹配呢?,规则如下:

(1)case中对象的unapply方法(对象提取器)返回Some集合则为匹配成功

(2)返回none集合则为匹配失败

2.应用案例

object Square {

def unapply(z: Double): Option[Double] = Some(math.sqrt(z))

def apply(z: Double): Double = z *z

}

//模式匹配使用,

val number: Double = 36.0

number match {

case Square(n) => printin(n)

case _=>println("nothing matched")

}[案例演示+代码说明+总结]

在这段代码中,写有 object,还有 unapply 方法和 apply 方法进行实现和重写。

Apply 方法是去构建或者初始化,是一个构造器。Unapply 是提取器,拆解一个对象,如上 unapply 后写了一个参数,接收一个 double 类型,然后返回了一个option[Double],option 是一个集合,里面可以存放double。

然后返回了一个 Some,里面写 math.sqrt(z),是将传入的z进行开平方,然后将开平方的结果放到 Some 集合中。

如果 apply 返回的是一个 Some,就匹配成功。

我们试着来运行,先来创建一个Scala Class名为MatchObject,类型为Object,

创建完成后代码完整如下:

package com.atguigu.chapter12

Object MatchObject {

def main (args:Array[String]):Unit = {

//模式匹配使用,

val number: Double = 36.0

number match {

//说明case Square(n)的运行的机制

//1.当匹配到case Square(n)

// 2.调用square 的unapply(z: Double) ,z的值就是number

//3.如果这个对象提取器unapply(z:Double)返回的是Some(6),则表示匹配成功,同时将6赋给Square(n)的n。

将上述代码val number: Double = 36.0改为val number: Double = Square(6.0)更易理解

case Square(n) => printin(“匹配成功n=” + n)

case _=>println("nothing matched")

}

}

}

object Square {

//说明

//1. unapply方法是对象提取器

//2.接收z:DoubLe类型

//3.返回类型是option [ Double]

//4. 返回的值是Some(math,sqrt(z)) 返回z的开平方的值,并放入到Some(x)

def unapply(z: Double): Option[Double] = {

Some(math.sqrt(z))

}

def apply(z: Double): Double = z *z

}

接着来运行查看结果,由于代码def unapply(z: Double): Option[Double] = Some(math.sqrt(z))

说明一定会匹配 some

结果显示:

匹配成功n=6.0

如果代码写的不是36,而是更形象的传入6.0,例如val number: Double = Square(6.0),再运行结果依然是 匹配成功 n=6.0。

如果传入的是5.0,那么结果就显示的是5.0。

来测试一下是否触发了 unapply 方法,在代码def unapply(z: Double): Option[Double] = {下输入

println(“unapply被调用 z是=” + z)

猜测应该是被调用一次,

运行结果显示:

unapply 被调用 z是 =25.0

匹配成功 n=5.0

再来演示返回none集合则为匹配失败案例,注释掉代码Some(math.sqrt(z)),输入None,会发现直接返回的是nothing matched匹配失败,

运行结果显示

unapply 被调用 z是 =25.0

nothing matched

仍然调用了 unapply,因为动作依然需要去做。

返回 None 匹配不成功,就不执行代码 case Square(n) => printin(“匹配成功n=” + n)

以上就是对对象匹配的基本介绍。

相关文章
|
机器学习/深度学习 编解码 数据可视化
英特尔提出新型卷积 | 让ResNet/MobileNet/ConvNeXt等Backbone一起涨点
英特尔提出新型卷积 | 让ResNet/MobileNet/ConvNeXt等Backbone一起涨点
530 2
|
存储 算法 关系型数据库
InnoDb行格式、数据页结构、索引底层原理和如何建立索引
InnoDb行格式、数据页结构、索引底层原理和如何建立索引
354 0
|
存储 NoSQL 关系型数据库
支持中低频量化交易的单机数据平台
支持中低频量化交易的单机数据平台,使用InfluxDB存储实时交易数据,HDF5存储静态历史数据用于回测。
5282 0
|
前端开发 JavaScript
用iframe的方式实现微前端
微前端是最近几年火起来的概念,iframe是早期实现微前端的理想方案,而现在有了其它的方案,比如qianduan框架,single-spa,以及webpack5带来的联邦模块方案。但是每一个方案都有其优缺点,感兴趣的可以去实践一下。
|
10月前
|
机器学习/深度学习 存储 弹性计算
阿里云gpu云服务器租用价格:最新收费标准及活动价格参考
阿里云gpu云服务器多少钱?A10卡GN7i GPU云服务器32核188G3213.99/1个月起,V100卡GN6v GPU云服务器8核32G3830.00/1个月起,阿里云GPU云服务器是基于GPU应用的计算服务,多适用于视频解码,图形渲染,深度学习,科学计算等应用场景,该产品具有超强计算能力、网络性能出色、购买方式灵活、高性能实例存储( GA1和GN5特有)等特点。下面小编来介绍下阿里云gpu云服务器最新的收费标准及活动价格。
|
IDE 开发工具 Android开发
移动应用开发之旅:探索Android和iOS平台
在这篇文章中,我们将深入探讨移动应用开发的两个主要平台——Android和iOS。我们将了解它们的操作系统、开发环境和工具,并通过代码示例展示如何在这两个平台上创建一个简单的“Hello World”应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧,帮助你更好地理解和掌握移动应用开发。
309 17
|
12月前
|
传感器 算法 机器人
聚焦视听触感官协同配合的具身精细操纵,人大胡迪团队领衔探索机器人模态时变性挑战
中国人民大学胡迪团队提出MS-Bot方法,通过阶段性引导的动态多感官融合,使机器人能像人类一样灵活运用视觉、听觉和触觉完成复杂任务。实验表明,该方法提高了操作准确性和效率,但仍面临数据依赖、计算复杂度和泛化能力等挑战。论文链接:https://arxiv.org/abs/2408.01366v2
411 21
|
算法 JavaScript
「AIGC算法」将word文档转换为纯文本
使用Node.js模块`mammoth`和`html-to-text`,该代码示例演示了如何将Word文档(.docx格式)转换为纯文本以适应AIGC的文本识别。流程包括将Word文档转化为HTML,然后进一步转换为纯文本,进行格式调整,并输出到控制台。转换过程中考虑了错误处理。提供的代码片段展示了具体的实现细节,包括关键库的导入和转换函数的调用。
348 0
|
关系型数据库 MySQL C#
Unable to connect to any of the specified MySQL hosts.
c#连接Mysql数据建立连接时提示:Unable to connect to any of the specified MySQL hosts. 出现此错误的原因是Server(数据库服务器IP地址填写错误) 当Server配置值是“(local)”或者是"(localhost)"时都会产生...
3480 0
|
存储 监控 BI
HIS系统是什么?一套前后端分离云HIS系统源码 接口技术RESTful API + WebSocket + WebService
医院管理信息系统(全称为Hospital Information System)即HIS系统。 常规模版包括门诊管理、住院管理、药房管理、药库管理、院长查询、电子处方、物资管理、媒体管理等,为医院管理提供更有力的保障。 HIS系统以财务信息、病人信息和物资信息为主线,通过对信息的收集、存储、传递、统计、分析、综合查询、报表输出和信息共享,及时为医院领导及各部门管理人员提供全面、准确的各种数据。 门诊医生工作站采用下拉式汉化菜单,界面友好,实用性强,设有与门诊挂号收费系统、医技科室信息系统、住院结算信息系统的软件接口。
788 1