内容匹配

import scala.util.Random

object TestMatch {
def main(args: Array[String]): Unit = {
//创建一个Int数组
val array = Array(12, 34, 56, 78)
//随机生成数组中的元素并赋值给常量i
val i = array(Random.nextInt(array.length))
println(array.length) println(i)
//模式匹配,匹配数组中的内容
i match {
case 12 => println("第一名")
case 34 => println("第二名")
case 56 => println("第三名")
case 78 => println("第四名")
case _ => throw new Exception("无匹配项")
}
}
}

类型匹配

import scala.util.Random

object TestMatch2 {
def main(args: Array[String]): Unit = {
//创建一个包含多种类型的数组
val array = Array(11, 55, 88, "zhangsan", "lisi", "wangwu", 3.14, 7.77, true)
//随机生成数组中的元素并赋值给常量value
val value = array(Random.nextInt(array.length)) println(value)
//模式匹配,匹配类型
value match {
// case x : Int => println("元素类型是Int")
case y: String => println("元素类型是String")
case z: Double => println("元素类型是Double")
case a: Boolean => println("元素类型是Boolean") case b: Int if (b > 20) => println("元素类型是Int且不是11") //if(b > 20)称为守卫条件,必须同时满足
case _ => throw new Exception("无匹配项")
}
}
}

s表达式

value match {
// case x : Int => println("元素类型是Int")
case y: String => println(s"提取的值为$y")
case _ => throw new Exception("无匹配项")
}
//s表达式可以让""内的内容全部自动拼接
//如上面,最后输出的结果应该是 提取的值为wangwu

case class 样例类

import scala.util.Random

//样例类是专门用于模式匹配的特殊类,使用关键字case修饰

// case class是普通的样例类,使用时按常理需要new一个对象
case class Submit(taskName:String,taskNum:Int) //需要构造参数列表 // case object是特殊样例类,不需要new
case object Holiday //case object 不需要参数列表 object CaseClassTest {
def main(args: Array[String]): Unit = {
//remove 'new' modifier case class会自动创建伴生对象,提供apply方法,所以一般情况下也不需要new
val array = Array(Holiday, Submit("makeMoney", 888))
val product = array(Random.nextInt(array.length)) product match {
case Holiday => println("放假啦")
case Submit(taskName,taskNum) => println(s"taskName:$taskName,taskNum:$taskNum")
}
}
}

偏函数

object PartialFunctionTest {
//偏函数
val func1: PartialFunction[String, Int] = {
case "one" => 1
case "two" => 2
case "three" => 3
case "four" => 4
case _ => -1
}
//上下两种方法相同
def func2(num: String): Int = num match {
case "one" => 1
case "two" => 2
case _ => -1
} def main(args: Array[String]): Unit = {
println(func1("one"))
println(func2("one"))
}
}

【Scala】代码实现Scala的各种模式匹配操作的更多相关文章

  1. jdb调试scala代码的简单介绍

    在linux调试C/C++的代码需要通过gdb,调试java代码呢?那就需要用到jdb工具了.关于jdb的用法在网上大家都可以找到相应的文章,但是对scala进行调试的就比较少了.其实调试的大致流程都 ...

  2. Scala 编程(三)基本类型和操作

    一些基本类型 值类型 范围 Byte 8位有符号补码整数(-27-27-1) Short 16位有符号补码整数(-215-215-1) Int 32位有符号补码整数(-231-231-1) Long ...

  3. Spark学习笔记3(IDEA编写scala代码并打包上传集群运行)

    Spark学习笔记3 IDEA编写scala代码并打包上传集群运行 我们在IDEA上的maven项目已经搭建完成了,现在可以写一个简单的spark代码并且打成jar包 上传至集群,来检验一下我们的sp ...

  4. Scala进阶之路-I/O流操作之文件处理

    Scala进阶之路-I/O流操作之文件处理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 说起Scala语言操作文件对象其实是很简单的,大部分代码和Java相同. 一.使用Scal ...

  5. Scala:Java 项目中混入scala代码

    Spark 是用Scala代码写的.为了调试Spark,做了如下尝试. 1.Eclipse下:Java 项目 ,Using Maven,编写了一个java 版Spark应用. Spark的代码(sca ...

  6. scala 入门(2)--数组相关操作

    scala 无论从数组的定义还是操作方面来说都跟java非常相似,但又有其独特的强大之处… 1. 定长数组 对于长度不变的数组,可以用scala中的Array. //scala 里使用new实例化对象 ...

  7. Scala对MongoDB的增删改查操作

    =========================================== 原文链接: Scala对MongoDB的增删改查操作 转载请注明出处! ==================== ...

  8. IntelliJ IDEA开发Scala代码,与java集成,maven打包编译

    今天尝试了一下在IntelliJ IDEA里面写Scala代码,并且做到和Java代码相互调用,折腾了一下把过程记录下来. 首先需要给IntelliJ IDEA安装一下Scala的插件,在IDEA的启 ...

  9. 创建工程支持scala代码开发

    第一步:idea当中创建创建普通maven工程 File ==> New ==> Project 第二步:修改pom.xml添加scala的版本以及打包插件 <dependencie ...

  10. [Scala] 快学Scala A2L2

    集合 13.1 集合的三大类 所有的集合都扩展Iterable特质.集合的三大集合为Seq, Set, Map Seq是一个有先后次序的值的序列,比如数组或列表.IndexSeq允许我们通过整型下表快 ...

随机推荐

  1. 复习python的多态,类的内部权限调用 整理

    #多态的用法 class Dii: passclass Aii(Dii): def run(self): print('一号函数已调用')class Bii(Dii): def run(Dii): p ...

  2. XML-解析失败原因初步分析

    更多精彩文章请关注公众号『大海的BLOG』 首先放出有问题的代码 之所以直入主题是因为肝完了事情,急需入睡.hiahia hiboard:updateUrl="https://xxx.com ...

  3. 装机摸鱼日记01--DDR3AMD专用内存+QHQF(6400T)试水

    前些日子在某鱼入手了两条AMD专用内存,宏想的DDR3-1600MHz-8G内存和一块高贵阿苏斯Z170-P-D3主板,然后某宝600多买了一颗QHQF(当然也可以玩QHQJ,更便宜,估计三百多),准 ...

  4. [V&N2020 公开赛]TimeTravel 复现

    大佬友链(狗头):https://www.cnblogs.com/p201821440039/ 参考博客: https://www.zhaoj.in/read-6407.html https://cj ...

  5. wechall前十题

    今天开始打一打wechall 累了打wechall,不累的时候开始打buu 第一题:Get Sourced 查看源代码即可,拉到底部 第二题:Stegano 属于misc的范畴,直接下载下来,然后no ...

  6. 【题解】P1291 百事世界杯之旅 - 期望dp

    P1291 [SHOI2002]百事世界杯之旅 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 "--在 \ ...

  7. hadoop 伪分布配置

    配置 Hadoop 伪分布式 任务配置说明: VMware 15 Centos 6.5 java -jdk 1.8 hadoop-2.6.0-cdh5.14.0.tar.gz 第一步 自行安装虚拟机 ...

  8. 【FishFX】花式撩骚,打造TypeScript易用框架。

    · 栗子入手 假设有以下foo数组,数组中每个对象都拥有id,name两个属性,现在需要查找id > 0的对象数量. const foo: Array<{ id: number, name ...

  9. Linux必须会的命令---也是以前记录的,ctrl+z fg 啥的 jobs 比较实用

    fg.bg.jobs.&.ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的 一.& 最经常被用到 这个用在一个命令的最后,可以把这个命令 ...

  10. Python之numpy,pandas实践

    Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言. Jupyter Notebook 的本质是一个 Web 应用程序,便 ...