内容匹配

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. 也谈如何实现bind、apply、call

    也谈如何实现bind.apply.call 我们知道,JavaScript的bind.apply.call是三个非常重要的方法.bind可以返回固定this.固定参数的函数包装:apply和call可 ...

  2. Linux-设备

    一.在Linux系统中,每个设备都被当成一个文件来对待. 在Linux系统中,几乎所有的硬件设备都在/dev这个目录内.

  3. F - Robot Motion 栈加BFS

    A robot has been programmed to follow the instructions in its path. Instructions for the next direct ...

  4. 浏览器中 JS 的事件循环机制

    目录 事件循环机制 宏任务与微任务 实例分析 参考 1.事件循环机制 浏览器执行JS代码大致可以分为三个步骤,而这三个步骤的往复构成了JS的事件循环机制(如图). 第一步:主线程(JS引擎线程)中执行 ...

  5. Linux编辑利器-Vim

    在大学时代,Vim 的大名就已如雷贯耳,但由于它陡峭的学习曲线,一直望而却步.等真正开始学习之后,发现并没有想象中的复杂,也没有所谓的瓶颈,只要在实际写代码中强迫自己使用就可以了,无形中就会形成习惯. ...

  6. Numpy学习-(2)

    我学习numpy过程的记录 1. 切片和索引 (1) 两种切片方式示例: (2) 多维数组: import numpy as np a = np.array([[1,2,3],[3,4,5],[4,5 ...

  7. jeecg ant design vue一级菜单跳到外部页面——例如跳到百度

    需求:点击首页跳到百度新打开的页面 找到SideMenu.vue   对应的inde.js找到renderMenuItem 函数.加一个判断 if(menu.meta.url=='https://ww ...

  8. Java ASM学习(2)

    1.编译后的方法区,其中存储的代码都是一些字节码指令 2.Java虚拟机执行模型: java代码是在一个线程内部执行,每个线程都有自己的执行栈,栈由帧组成,每个帧表示一个方法的调用,每调用一个方法,都 ...

  9. 创建线程的方式三:实现Callable接口-----JDK5.0 新增

    package com.yhqtv.java2; /* * 创建线程的方式三:实现Callable接口-----JDK5.0 新增 * * 如何理解实现Callable接口的方式创建多线程比实现Run ...

  10. Linux Centos7(Mac)安装Docker

    docker 强调隔离性 docker:官网 docker:镜像官网:        镜像官网可以所有应用,选择安装环境:会给出安装命令,例如:docker pull redis 默认拉取最新的版本( ...