模式匹配类型
一、匹配常量
在scala中,模式匹配可以匹配所有的字面量,包括字符串,字符,数字,布尔值等等
def describeConst(x:Any):String = x match {case "str" => "匹配字符串"case '+' => "匹配字符"case 1 => "匹配整数"case true => "匹配布尔值"case a => s"匹配$a"}println(describeConst("str"))println(describeConst('+'))println(describeConst(1))println(describeConst(true))println(describeConst('-'))

二、匹配类型
def describeType(x:Any):String = x match {case x:String => "匹配字符串"case x:Char => "匹配字符"case x:Int => "匹配整数"case x:Boolean => "匹配布尔值"case list:List[String] => "List" + listcase array:Array[Int] => "Array" + array.mkString("\t")case a => s"匹配$a"}println(describeType("str"))println(describeType('+'))println(describeType(1))println(describeType(true))println(describeType(List("a","b","c")))// 泛型擦除println(describeType(List(1,2,3,4,5)))println(describeType(Array(1,2,3,4,5)))// array不存在泛型擦除println(describeType(Array("1","2")))

三、匹配集合类型
代码:
for (arr <- List(Array(0),Array(1,0),Array(0,1,0),Array(1,1,0),Array(2,3,7,15),Array("hello","a",30))){val result = arr match{case Array(0) => "0"case Array(1,0) => "Array(1,0)"case Array(x,y) => "Array: " + x + ", " + ycase Array(0,_*) => "以0开头的数组"case Array(x,1,z) => "中间为1的三元素数组"case _ => "Something else"}println(result)}
结果:

for(list <- List(List(0),List(1,0),List(0,0,0),List(1,1,0),List(88),List("hello"))){val result = list match {case List(0) => "0"case List(x,y) => "List(x,y): " + x + ", " + ycase List(0,_*) => "List(0,..."case List(a) => "List(a):" + acase _ => "something else"}println(result)}
结果:

代码:
val list1 = List(1,2,5,7,24)val list = List(24)list match {case first :: second :: rest => println(s"first:$first, second:$second , rest: $rest")case _ => println("something else")}list1 match {case first :: second :: rest => println(s"first:$first, second:$second , rest: $rest")case _ => println("something else")}
结果:

for (tuple <- List((0,1),(0,0),(0,1,0),(0,1,1),(1,23,56),("hello",true,0.5))){val result = tuple match {case (a,b) => "" + a + ", " + bcase (0,_) => "(0, _)"case (a,1,_) => "(a,1,_) " +acase _ => "something else"}println(result)}
结果:

在变量声明时匹配:
val (x,y) = (10,"hello")println(s"x:$x,y:$y")val List(first,second,_*) = List(23,15,9,78)println(s"first:$first,second:$second")val fir :: sec :: rest = List(23,15,9,78)println(s"first:$fir,second:$sec,rest:$rest")

for推导式中进行模式匹配
将List的元素直接定义为元组,对变量赋值
val list = List(("a",12),("b",35),("c",27))for ((word,count) <- list){println(word + " " + count)}

可以不考虑某个位置的变量,只遍历key或者value
val list = List(("a",12),("b",35),("c",27))for ((word,_) <- list)println(word)

可以指定某个位置的值必须是多少
val list = List(("a",12),("b",35),("c",27),("a",99))for(("a",count) <- list){println(count)}

四、匹配对象及样例类
package scala
object User {def main(args: Array[String]): Unit = {val student = Student("alice",19)val result = student match {case Student("alice",19) => "Alice, 19"case _ => "Else"}println(result)}case class Student(name:String,age:Int)}

相关文章:
模式匹配类型
一、匹配常量 在scala中,模式匹配可以匹配所有的字面量,包括字符串,字符,数字,布尔值等等 def describeConst(x:Any):String x match {case "str" > "匹配字符串"case > "匹配字符&…...
每天10个vue面试题(七)
1、Vue如何监听页面url中hash变化? 监听 $route 的变化:在Vue中,你可以使用watch属性来监听$route的变化。当路由发生变化时,会执行相应的处理函数。使用 window.location.hash:直接读取window.location.hash的值。这…...
如何在Linux系统中使用Apache HTTP Server
如何在Linux系统中使用Apache HTTP Server Apache简介 安装Apache 在Debian/Ubuntu系统中安装 在CentOS/RHEL系统中安装 启动Apache服务 验证Apache是否正在运行 访问Apache默认页面 配置Apache虚拟主机 创建虚拟主机配置文件 示例虚拟主机配置 创建网站根目录 准备静态网站内…...
C++基于opencv的视频质量检测--画面冻结检测
文章目录 0.引言1. 原始代码分析2. 优化方案3. 优化后的代码4. 代码详细解读 0.引言 视频质量画面冻结检测已在C基于opencv4的视频质量检测中有所介绍,本文将详细介绍其优化版本。 1. 原始代码分析 图像抖动检测的原始代码: bool ScreenFreezeDetect…...
Day22 opencv图像预处理
图像预处理 在计算机视觉和图像处理领域,图像预处理是一个重要的步骤,它能够提高后续处理(如特征提取、目标检测等)的准确性和效率。OpenCV 提供了许多图像预处理的函数和方法,常见的操作包括图像空间转换、图像大小调…...
QT中的定时器与计时器
目录 QTimer QTimer 的替代方案 API QElapsedTimer API 笔者写Qt的时候经常遇到需要定时完成任务的情况。举个例子:我写串口通信程序的时候需要定时向下位机发送数据。或者是定时任务周期性出发(更新时间等) 在Qt中,有两个非…...
国内AI大模型学习平台
据不完全统计,目前,国内有几大AI大模型学习平台可供选择: 1.昇思大模型平台:这是一个集算法选型、创意分享、模型实验和大模型在线体验于一体的AI学习与实践社区。 2.魔搭社区:提供AI模型、数据集和应用的开发与探索平…...
曹操出行借助 ApsaraMQ for Kafka Serverless 提升效率,成本节省超 20%
本文整理于 2024 年云栖大会主题演讲《云消息队列 ApsaraMQ Serverless 演进》,杭州优行科技有限公司消息中间件负责人王智洋分享 ApsaraMQ for Kafka Serverless 助力曹操出行实现成本优化和效率提升的实践经验。 曹操出行:科技驱动共享出行未来 曹操…...
深入理解数据库的三范式
数据库设计中的范式(Normal Form)是用于规范数据存储结构、消除冗余以及保证数据一致性的重要原则。范式的概念有多种层次,常用的前三种称为第一范式(1NF)、第二范式(2NF)和第三范式(…...
P11233 [CSP-S 2024] 染色
P11233 [CSP-S 2024] 染色 难度:提高/省选-。 考点:DP。 题意: 给定 n n n 个数 A i A_i Ai,对 A i A_i Ai 进行染色,只有两种颜色。设 C C C 为 A A A 染色后的数组。 如果 A i A_i Ai 左侧没有预期同…...
图传推流学习(敬请期待)
图传推流简介 1.RTSP、RTP与RTCP2.搭建rtsp服务器(资源下载)3.搭建rtsp服务器(搭建过程) 1.RTSP、RTP与RTCP RTSP(Real Time Streaming Protocol)、RTP(Real-time Transport Protocol࿰…...
【JavaGuide】十大经典排序算法总结
冒泡排序 算法步骤 不断的两两比较,这样当前最大的元素总是会排在最后面。所以称为冒泡。 图解算法 代码实现 public static int[] bubbleSort(int[] arr) {// i是排好了几个数for (int i 1; i < arr.length; i) {// flag标记当前循环是否调整了顺序,…...
程序中怎样用最简单方法实现写excel文档
很多开发语言都能找到excel文档读写的库,但是在资源极其受限的环境下开发,引入这些库会带来兼容性问题。因为一个小功能引入一堆库,我始终觉得划不来。看到有项目引用的jar包有一百多个,看着头麻,根本搞不清谁依赖谁。…...
《机器学习与人类学习:比较、融合与未来展望》
《机器学习与人类学习:比较、融合与未来展望》 一、引言二、机器学习的概念与发展(一)机器学习的定义与分类(二)机器学习的发展历程(三)机器学习的应用领域 三、人类学习的本质与过程࿰…...
Mysql 8.4.3LTS 的离线部署
文章目录 一、部署环境资源配置 二、下载地址版本选择 三、部署详情1. 上传安装包2. 解压软件包3. 安装mysql3.3.1 创建mysql用户与用户组3.3.2 授权安装文件夹3.3.3 安装libaio依赖 (坑)ubuntu24.04 中关于libaio的坑 3.3.4 初始化Mysql数据库3.3.5 编辑…...
h5项目打包上线报错404文件找不到
配置一下路由就可以了 1.找到项目里的这个文件 2.滑到最下面‘源码视图’ 3.找到base,没有的话写上一个,保存后打包就可以了 "h5" : {"router" : {"base" : "./"}}...
mysql上课总结(5)(MySQL的完整性约束(详细介绍))
目录 一、完整性约束。 (1)概念与目的。 <1>概念。 <2>目的。 (2)各个约束的详细(表格) (3)各个约束的简要总结。 <1>主键约束。 <2>唯一约束。 <3>非…...
复原IP地址
分割字符串的姐妹题 题目:93. 复原 IP 地址 - 力扣(LeetCode) 题解:代码随想录 代码: class Solution {List<String> resnew ArrayList<>();public List<String> restoreIpAddresses(String s) …...
Effective C++ 学习笔记二
Effective C 学习笔记二 文章目录 Effective C 学习笔记二别让异常逃离析构函数绝不在构造和析构的过程中调用virtual函数令operator 返回一个reference to *this在operator中处理"自我赋值"C四种转换 别让异常逃离析构函数 C 并不禁止析构函数吐出异常,…...
以「JIMUMETA元宇宙体验馆」为例,探讨有哪些元宇宙场景?
让我们以「JIMUMETA元宇宙体验馆」为例,深入探讨元宇宙场景中提供的产品与服务。该体验馆由视创云展精心打造,集成了企业主展馆、元宇宙虚拟活动分会场、品牌展示分会场、线上论坛会场以及会议室接待会客等多重功能,旨在全方位满足企业发布会…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
