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

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

开发者学堂课程【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)

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

相关文章
|
3月前
ES6 扩展运算符 ...【详解】(含使用场景、实战技巧和范例、实现原理、错误用法)
ES6 扩展运算符 ...【详解】(含使用场景、实战技巧和范例、实现原理、错误用法)
38 5
|
4月前
|
SQL JSON 数据库
技术笔记:mysqlidb类的使用方法汇总
技术笔记:mysqlidb类的使用方法汇总
35 0
|
Scala 开发者
类型匹配的基本介绍和使用 | 学习笔记
快速学习类型匹配的基本介绍和使用
类型匹配的基本介绍和使用 | 学习笔记
|
Java Scala 开发者
Match 基本介绍和快速入门 | 学习笔记
快速学习 Match 基本介绍和快速入门
Match 基本介绍和快速入门 | 学习笔记
|
Java 程序员 Scala
包的使用细节和注意事项1|学习笔记
快速学习包的使用细节和注意事项1。
包的使用细节和注意事项1|学习笔记
|
Go 开发者
切片基本介绍和入门 | 学习笔记
简介:快速学习切片基本介绍和入门
151 0
切片基本介绍和入门 | 学习笔记
|
存储 网络协议 测试技术
文件的基本介绍 | 学习笔记
快速学习文件的基本介绍
文件的基本介绍 | 学习笔记
|
网络协议 Java 测试技术
继承快速入门应用实例|学习笔记
快速学习继承快速入门应用实例
继承快速入门应用实例|学习笔记
|
Java Scala 开发者
函数基本介绍和快速入门|学习笔记
快速学习函数基本介绍和快速入门。
104 0
|
编译器 Scala 开发者
元组的基本介绍和创建 | 学习笔记
快速学习元组的基本介绍和创建