内容匹配

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. unity3d的键盘和鼠标输入

    一.键盘的输入 •GetKey,GetKeyDown,GetKeyUp三个方法分别获取用户键盘按键的输入 1. GetKey:用户长按按键有效: bool down = Input.GetKeyDow ...

  2. day8作业

    # 一:for循环 # 1.1 for循环嵌套之打印99乘法表 for i in range(1,10): for j in range(1,i+1): print("{} * {} = { ...

  3. windows UAC 提权实验(CVE-2019-1388)

    --------------------------------------------------------------------------------- 声明:本文仅做学习,实验主机为虚拟机 ...

  4. [YII2] 去除自带头部以及底部右下角debug调试功能

    YII2 去除自带头部以及底部右下角debug调试功能

  5. 小白必看,Python 各种下划线都是啥意思_、_xx、xx_、__xx、__xx__、_classname_

    我们在定义一些变量或者方法的时候,常常会用到下划线,在 Python 中,下划线可是很有用处的哟,比如变量,有些是一个下划线开头的(_xx),有些是两个下划线开头的(__xx),有些是在名称的结尾添加 ...

  6. PHP Callable强制指定回调类型的方法

    如果一个方法需要接受一个回调方法作为参数,我们可以这样写 <?php function dosth($callback){ call_user_func($callback); } functi ...

  7. PHP把PNG图片转化为JPG时透明背景变黑色

    $type = exif_imagetype($srcimg); switch($type) { case 1: $simg = imagecreatefromgif($srcimg); break; ...

  8. CG-CTF(6)

    CG-CTF https://cgctf.nuptsast.com/challenges#Web 续上~ 第三十一题:综合题2 查看本CMS说明: 分析: ①数据库表名为admin:字段名为usern ...

  9. 第 3 篇:实现博客首页文章列表 API

    作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 此前在讨论基于模板引擎的开发方式和 django-rest-framework 开发 ...

  10. 自定义spring boot的自动配置

    文章目录 添加Maven依赖 创建自定义 Auto-Configuration 添加Class Conditions 添加 bean Conditions Property Conditions Re ...