对象匹配的应用案例 | 学习笔记

简介: 快速学习对象匹配的应用案例

开发者学堂课程【Scala 核心编程 - 进阶对象匹配的应用案例学习笔记,与课程紧密连接,让用户快速学习知识。

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


对象匹配的应用案例


应用案例

本节继续讲解对象匹配的应用案例,先对上节案例进行小结:

(1)构建对象时apply会被调用,比如val n1 = Square(5)

(2)当将Square(n)写在case后时[case Square(n) => xxx],会默认调用unapply方法(对象提取器)

(3)nuber会被传递给def unapply(z: Double)的z形参

(4)如果返回的是Some集合,则unapply提取器返回的结果会返回给n这个形参

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

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

应用案例2

object Names {

def unapplySeq(str: String): Option[Seq[String]]={

if (str.contains(“,")) Some(str.split(“,”))

else None

}}

val namesString = "Alice,Bob,Thomas"

//说明

namesString match {

case Names(first,second, third) =>{

println("the string contains three people's names")

//打印字符串

printin(s”$first $second $third")

}

case_=> printin("nothing matched")

}

上述代码添加了 unapplySeq,因为第一个案例返回时对应的构造形参只有一个,我们使用的是 unapply,但是构建对象时可能传入好多参数。unapplySeq 返回的是序列,Option[Seq[String]]中返回的是多个。

举一个例子 Alice、Bob、Thomas,调用 unapplySeq 方法返回 Some 三个值,Some(“”,””,””)中的三个值就分别返回给 first;second,third。

来演示:创建一个 Scala Class名为MatchObjectDemo2

代码完整如下:

package com.atguigu.chapter12

Object MatchObjectDemo2 {

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

val namesString = "Alice,Bob,Thomas"  //字符串

//说明

namesString match {

//当执行case Names(first,second, third)

//1.会调用unapplySeq(str),把”Alice,Bob,Thomas”传入给str

//2.如果返回的是Some(“Alice”,”Bob”,”Thomas”),分别给(first,second, third)

//  注意,这里的返回的值的个数需要和(first,second, third)要一样

//3.如果返回的None,表示匹配失败

case Names(first,second, third) =>{

println("the string contains three people's names")

//打印字符串

printin(s”$first $second $third")

}

case_=> printin("nothing matched")

}

}

}

//object

object Names {

//当构造器是多个参数时就会触发这个对象提取器

def unapplySeq(str: String): Option[Seq[String]]={

if (str.contains(“,")) Some(str.split(“,”))

else None

}}

运行,结果显示

Alice Bob Thomas

下面我们将个数改为不一致,修改代码:

case Names(first,second)

printin(s”$first $second")

再来运行查看结果,结果显示

nothing matched

再来修改字符串中没有”,”,修改代码:

val namesString = "AliceBobThomas"

运行查看结果,结果显示

nothing matched

应用案例2的小结

1)当case后面的对象提取器方法的参数为多个,则会默认调用def unapplySeq()方法

2)如果unapplySeq返回是Some,获取其中的值,判断得到的sequence中的元素的个数是否是三个,如果是三个,则把三个元素分别取出,赋值给first,second和third(不一定名字为first,second和third,可以自定义abc等)

3)其它的规则不变.

相关文章
|
5月前
|
Java 索引
正则表达式源码分析--三个常用类--分组、捕获、反向引用--String 类中使用正则表达式的代码示例和图
正则表达式源码分析--三个常用类--分组、捕获、反向引用--String 类中使用正则表达式的代码示例和图
48 0
|
5月前
|
数据采集 Java API
Java 正则表达式【非贪婪匹配、格式验证、反向引用、API】
Java 正则表达式【非贪婪匹配、格式验证、反向引用、API】
|
6月前
匹配多个对象
匹配多个对象
24 3
|
9月前
|
Java API 数据安全/隐私保护
字符串讲解以及一些基础案例的练习
字符串讲解以及一些基础案例的练习
43 0
|
前端开发
前端学习案例9-正则-非捕获反向引用
前端学习案例9-正则-非捕获反向引用
48 0
前端学习案例9-正则-非捕获反向引用
|
前端开发
前端学习案例4-正则概述-字符组的简写
前端学习案例4-正则概述-字符组的简写
40 0
前端学习案例4-正则概述-字符组的简写
|
前端开发
前端项目实战167-对传入的数据进行id和日期匹配
前端项目实战167-对传入的数据进行id和日期匹配
54 0
|
SQL Python
Python基础记录下字符串模糊匹配的方式
使用Python的difflib库中get_close_matches方法
210 0
Python基础记录下字符串模糊匹配的方式
|
编译器 Scala 开发者
类型匹配的注意事项和细节 | 学习笔记
快速学习类型匹配的注意事项和细节
58 0
|
Scala 开发者
类型匹配的基本介绍和使用 | 学习笔记
快速学习类型匹配的基本介绍和使用
63 0
类型匹配的基本介绍和使用 | 学习笔记