【Scala入门学习】匹配模式match

1. match匹配

match 语句用在当需要从多个分支中进行选择的场景,类似于java 中的switch 语句。

语法:

变量 match{case "值"  => 语句块1  // 语句块后不用加breakcase "值2" => 语句块2case _ => 语句块N    // 类似于java的default
}

其中:

1)case 后面的表达式可以是任何类型的常量,如字段串、类、元组、集合等;

2)与java的switch不同的是,match 结构中不需要break 语句来跳出判断;

3)最后一个case语句用了通配符“_”,相当于java的default;

4)如果匹配不到,就会报错;

2. 字符串匹配

def main(args: Array[String]): Unit = {
//    while(true){
//      val number = StdIn.readInt()
//      if (number == 1)
//        println("start")
//      else if (number == 2)
//        println("running")
//      else if (number == 3)
//        println("stop")
//    }while(true){val number = StdIn.readInt()number match {case 1 => println("start")case 2 => println("running")case 3 => println("stop")case _ => println("invalid number")}}

返回值和守卫

    //    val age = 20//    val res = age match {//      case 18 => 10//      case 20 => 200//    }//    println(res)val name = "zhangsan"val age = 20val res: AnyVal = name match {case "zhangsan" if (age > 18) => 10000case "lisi" => 8000case "wangwu" => 8000case _ => println("think think ..")}println(res)//    name match {//      case "zhangsan" if(age>18) => println("u r in!!!")//      case "lisi" => println("not in")//      case "wangwu" =>println("not in")//      case _ => println("think think ..")//    }

3. 类型匹配

match除了匹配特定的常量,还能匹配某种类型的所有值;

在scala 中倾向于用这样的模式匹配,而不是isInstanceOf 操作符;

object TestMatch{   def main(args:Array[String]):Unit = {val value:Any = 20//    if(value.isInstanceOf[Int]){//      println("Int")//    }value match {case x:Bird => println(x,"bird")case x:Int if(x>18) => println(x,"Int")case x:Int if(x>18) => println(x,"Int1")case x:String => println(x,"String")case x:Boolean => println(x,"Boolean")case _ => println("unknow type!!")}}
}
class Bird

4. 数组、元组、集合匹配、映射匹配

元组匹配时case后面的值的个数应与被匹配的元组中数据的个数相同,否则报错。

当有多个条件能匹配到时以最先匹配到的条件为准

//    val arr = Array(1,2,3,4)
//    arr match {case x:Array[Int] => println(1)case Array(1,2,3,4) => println(2)case Array(a,b,c,d) => println(a,b,c,d)case Array(1,2,a,b) => println(a,b)
//      case Array(a,b,_,_) => println(a,b)
//      case _ => println("no match!!")
//    }
//    val tp = (1,"zhangsan",20)
//    tp match {
//      case (1,"zhangsan",20) => println("1")
//      case x:(Int,String,Int) => println("2")
//      case (a,b,c) => println(a,b,c)
//      case (a,b,_) => println(a,b)
//      case Tuple3(a,b,c) => println(a,b,c)
//      case _ => println("unknow type")
//  }
//    val list = List(1,2,3,4)
//    list match {
//      case List(1,2,3,4) => println("1")
//      case x:List[Int] => println(x)
//      case List(a,b,c,d) => println(a,b,c,d)
//      case List(a,b,_,_) => println(a,b)
//      case a::b::c::d => println(a,b,c,d)
//      case a::b::c::d::Nil => println(a,b,c,d)
//    }//    val map = Map("zhangsan"->20,"lisi"->30)
//    map.get("zhangsan1") match {
//      case Some(v) => println(v)
//      case None => println("no value")
//    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5、JavaScript(五)

28.jquery:js库 简化版本的js,封装了现成功能的js代码。 jquery就是一些封装好了的现成的方法,供我们直接使用。 jquery能实现的js都能实现。 在使用 记得先引入jquery:在菜鸟教程上直接用jquery的绝对路径引入,jq…

Gin框架操作指南03:HTML渲染

官方文档地址(中文):https://gin-gonic.com/zh-cn/docs/ 注:本教程采用工作区机制,所以一个项目下载了Gin框架,其余项目就无需重复下载,想了解的读者可阅读第一节:Gin操作指南&#…

java游戏网站源码

题目:java游戏网站源码 编号B22A390 主要内容:毕业设计(Javaweb项目|小程序|Mysql|大数据|SSM|SpringBoot|Vue|Jsp|MYSQL等)、学习资料、JAVA源码、技术咨询 文末联系获取 感兴趣可以先收藏起来,以防走丢,有任何选题、文档编…

什么是 BloomFilter

什么是 BloomFilter 布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。主要用于判断一个元素是否在一个集合中。 通常我们会遇到很多要判断一个元素是否在某个集合中的业务场景&a…

Cocos Creator导出obj文件用于后端寻路

Cocos Creator 3.8.0 用这个扩展插件 【杨宗宝】两年前写的网格工具,今天将它开源了。 - Creator 3.x - Cocos中文社区carlosyzy_extensions_mesh: Cocos Creator 3.x mesh插件,负责网格数据的导出。合并,拆封等一系列操作 (gitee.com) 下…

分类任务中评估模型性能的核心指标

在机器学习尤其是分类任务中,Accuracy(准确率)、Precision(精确率)、Recall(召回率)和F1 Score(F1分数)是评估模型性能的四个核心指标。每个指标都有其独特的含义和用途&…

排序基础方法

逆序(inversion) 一个序列中存在元素对,顺序与理想顺序相反 注意事项 算法的空间复杂度,即便graph本身要花费VE,但是DFS是V,只考虑自身要用的。 Selection Sort(选择排序) 方法 不断选择最…

牛客编程初学者入门训练——BC53 判断是元音还是辅音

BC53 判断是元音还是辅音 描述 KiKi开始学习英文字母,BoBo老师告诉他,有五个字母A(a), E(e), I(i), O(o),U(u)称为元音,其他所有字母称为辅音,请帮他编写程序判断输入的字母是元音(Vowel)还是辅音&#x…

如何在算家云搭建Video-Infinity(视频生成)

一、模型介绍 Video-Infinity是一个先进的视频生成模型,使用多个 GPU 快速生成长视频,无需额外训练。它能够基于用户提供的文本或图片提示,创造出高质量、多样化的视频内容。 二、模型搭建流程 1.大模型 Video-Infinity 一键使用 基础环境…

Axure使用echarts详细教程

本次使用的axure版本为rp9,下面是效果图。 接下来是详细步骤 【步骤1】在axure上拖一个矩形进来,命名为myChart(这个根据实际情况来,和后面的代码对应就好) 【步骤2】 点击交互->选择加载时->选择打开链接->链接外部地址 点击fx这个符号 【步骤3】在弹…

【GIT】.cr、.gitattributes 、 .gitignore和.git各文件夹讲解介绍

在 Git 项目中,.cr、.gitattributes 和 .gitignore 文件分别用于不同的配置和管理功能。下面分别解释这些文件的作用和用途: 1. .gitignore 文件 作用: .gitignore 文件用于指定哪些文件或目录应该被 Git 忽略,不会被追踪或提交…

LabVIEW提高开发效率技巧----减少UI更新频率

在LabVIEW开发中,图形化用户界面(UI)的更新频率对程序的响应速度有着显著影响。频繁的UI更新会占用大量资源,导致系统性能下降。本文将详细介绍如何通过减少UI更新频率来提升LabVIEW程序的运行效率,从多个角度进行分析…

Leetcode 判断子序列

通过双指针来判断字符串s是否是字符串t的子序列。 算法思想: 双指针法: 我们使用两个指针i和j分别遍历字符串s和t。初始时,i指向s的第一个字符,j指向t的第一个字符。 匹配字符: 每次比较s[i]和t[j]: 如果…

大模型撬动数据新质生产力,我们重新解构了智能BI

大模型撬动数据新质生产力, 我们重新解构了智能BI 作者 | 曾响铃 文 | 响铃说(xiangling0815) “超级人工智能将在‘几千天内’降临。” 最近,OpenAI 公司 CEO 山姆奥特曼在社交媒体罕见发表长文,预言了这一点。之前…

web前端-----html5----用户注册

以改图为例 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>用户注册</title> </hea…

IC验证面试中常问知识点总结(五)附带详细回答!!!

13、phase相关 13.1 phase列表及分类 task phase: 耗费仿真时间,如run phase;给DUT施加激励、监测DUT的输出都是在这些phase中完成的。 function phase:如build_phase、connect_phase等,这些phase都不耗费仿真时间。 13.2 为什么引入动态运行phase(12个小phase)? 为了…

JNA调用c++动态库返回数据

jna学习网站 JNA Examples 1、返回String, pch.h头文件 // pch.h: 这是预编译标头文件。 // 下方列出的文件仅编译一次&#xff0c;提高了将来生成的生成性能。 // 这还将影响 IntelliSense 性能&#xff0c;包括代码完成和许多代码浏览功能。 // 但是&#xff0c;如果此处…

docker harbor

文章目录 一&#xff0c;搭建私有仓库1.1下载registry1.2在 daemon.json 中添加私有镜像仓库地址1.3重新加载重启docker1.4运行容器1.5拉取一个centos7镜像1.6给镜像加标签1.7上传镜像1.8显示私有仓库的所有镜像1.8查看私有仓库的 centos 镜像有哪些tag 二&#xff0c;什么是ho…

SVN——常见问题

基本操作 检出 提交 更新 显示日志 撤销本地修改 撤销已提交内容 恢复到指定版本 添加忽略 修改同一行 修改二进制文件

个人博客搭建 | Hexo框架

文章目录 1.Hexo安装2.创建博客3.将博客通过GitHub来部署4.更换主题 1.Hexo安装 Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown&#xff08;或其他标记语言&#xff09;解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。搭建Hexo首先要…