内容匹配

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. stand up meeting 11/18/2015

    今日工作总结: 冯晓云:完成C#版本API的class library编译,尝试与主程序进行通信:昨天临时通知让用C++封装,不解!!![后续:我用C#做了一个查词的APP,调用的就是这个API的DL ...

  2. DOS事件

    1 onblur 失去焦点 2 onchange   改变 3 onkeyup      按键弹起 4 onmouse over 鼠标移上去 5 onmouse leave   鼠标离开 6 onmo ...

  3. Netty入门与实战教程总结分享

    前言:都说Netty是Java程序员必须要掌握的一项技能,带着不止要知其然还要知其所以然的目的,在慕课上找了一个学习Netty源码的教程,看了几章后着实有点懵逼.虽然用过Netty,并且在自己的个人网 ...

  4. shell脚本:备份数据库、代码上线

    备份MySQL数据库场景:一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求:1)每天备份一次,需要备份所有的库2)把备份数据存放到/data/backup/下3 ...

  5. java并发中CountDownLatch的使用

    文章目录 主线程等待子线程全都结束之后再开始运行 等待所有线程都准备好再一起执行 停止CountdownLatch的await java并发中CountDownLatch的使用 在java并发中,控制 ...

  6. MYSQL隔离级别 与 锁

    1.四种隔离级别下数据不一致的情况   脏读 不可重复读 幻读 RU 是 是 是 RC(快照读) 否 是 是 RC(当前读) 否 否 是 RR(快照读) 否 否 是 RR(当前读) 否 否 否 Ser ...

  7. docker中安装nginx,部署前端代码

    最近在学习docker,初次接触,难免遇到磕磕碰碰,遂将其整理成博客,以便日后查看. 1.拉取nginx镜像 直接从官方镜像库拉取简单粗暴: docker pull nginx 2.运行 docker ...

  8. MySQL根据业务场景归纳常用SQL语句

    素材表数据:user[{"id":1,"name":"x"},{"id":2,"name":&quo ...

  9. composer+psr-4实现自动加载

    自动加载 对于库的自动加载信息,Composer 生成了一个 vendor/autoload.php 文件.你可以简单的引入这个文件,你会得到一个免费的自动加载支持. require 'vendor/ ...

  10. pvresize

    lvm pv 扩容 pvresize 当PV对应的设备分区(如md软raid)扩容之后,利用该命令可以扩容PV