一、 模式匹配和样例类

Scala有一个十分强大的模式匹配机制,可以应用到很多场合:如switch语句、类型检查等。
并且Scala还提供了样例类,对模式匹配进行了优化,可以快速进行匹配
1. 匹配字符串

package cn.toto.scala.day2import scala.util.Random/*** Created by toto on 2017/6/30.*/
object CaseDemo extends App{var  arr = Array("zhangsan","lisi","wangwu")val name = arr(Random.nextInt(arr.length))name match {case "zhangsan" => println("zhangsan....")case "lisi" => println("lisi....")case "wangwu" => println("wangwu....")case _ => println("真不知道你们在说什么....")}
}

2. 匹配类型

package cn.toto.scala.day2import scala.util.Random/*** Created by toto on 2017/7/1.* 匹配类型*/
object CaseDemo02 extends App {//val v = if(x >= 5) 1 else if(x < 2) 2.0 else "hello"//可以使用不同的类型,可以使用自己定义的类型val arr = Array("hello",1,2.0,CaseDemo)val v = arr(Random.nextInt(4))println(v)v match {case x:Int => println("Int " + x)case y:Double if(y >= 0) => println("Double " + y)case z:String => println("String " + z)case CaseDemo => {println("case demo")}case _ => {println("default")}}
}

运行的结果有以下几种情况:

cn.toto.scala.day2.CaseDemo$@5f2050f6
case demo2.0
Double 2.0hello
String hello1
Int 1

**注意:**case y: Double if(y >= 0) => …
模式匹配的时候还可以添加守卫条件。如不符合守卫条件,将掉入case _中
3. 匹配数组、List、元组

package cn.toto.scala.day2/*** Created by toto on 2017/7/1.* 整个的运行结果是:* 匹配2,3开头的 5* ===========================* 3* List(-1)* ===========================* 3 List(-1)* 2,3 7*/
object CaseDemo3 extends App{var arr = Array(2,3,5)/*** 可以匹配数组中的一部分的内容*/arr match {case Array(1, x, y) => println(x + " " + y)case Array(2,3,x) => println("匹配2,3开头的 " + x)case Array(0) => println("only 0")case Array(0, _*) => println("0 ...")case _ => println("something else")}println("===========================")val lst = List(3,-1)println(lst.head)println(lst.tail)println("===========================")//Nil表示空列表lst match {case 0 :: Nil => println("only 0")//运行结果是:3 List(-1)case 3 ::a => println(s"3 $a")//下满的结果是:x: 3 y: -1//case x :: y :: Nil => println(s"x: $x y: $y")   //注意要加个字符串scase 0 :: tail => println("0 ...")case _ => println("something else")}println("===========================")//下面的运行结果是:2,3 7//元组val tup = (2,3,7)tup match {case (1,x,y) => println(s"1,$x,$y")case (2,3,a) => println(s"2,3 $a")case (_,z,5) => println(z)case _=> println("else")}
}

注意:在Scala中列表要么为空(Nil表示空列表)要么是一个head元素加上一个tail列表。
9 :: List(5, 2) :: 操作符是将给定的头和尾创建一个新的列表
注意::: 操作符是右结合的,如9 :: 5 :: 2 :: Nil相当于 9 :: (5 :: (2 :: Nil))
4. 样例类
在Scala中样例类是一中特殊的类,可用于模式匹配。case class是多例的,后面要跟构造参数,case object是单例的

package cn.toto.scala.day2import scala.util.Random/*** Created by toto on 2017/7/1.*/
case class SubmitTask(id: String, name: String)
case class HeartBeat(time: Long)
case object CheckTimeOutTask/*** 下面的結果分为一下几种情况:* 0001, task-0001** check* * 123333*/
object CaseDemo04 extends App {val arr =  Array(CheckTimeOutTask,HeartBeat(123333),SubmitTask("0001","task-0001"))arr(Random.nextInt(arr.length)) match {case SubmitTask(id,name) => {println(s"$id, $name")}case HeartBeat(time) => {println(time)}case CheckTimeOutTask => {println("check")}}
}

Scala模式匹配,case 字符串,case 匹配类型,case 匹配数组,case 匹配List,case 匹配元组,case匹配case class和case object相关推荐

  1. Greenplum 优化CASE - 对齐JOIN字段类型,使用数组代替字符串,降低字符串处理开销,列存降低扫描开销...

    标签 PostgreSQL , 数组 , 字符串 , 字符串处理 , JOIN , where , 类型一致性 背景 Greenplum通常被用作OLAP,在一些用户使用过程中,可能因为数据结构设计, ...

  2. 5、Scala模式匹配

    一.case class 用case修饰的Class 我们称之为Case Class.编译器看到这个case修饰的class,会为这个class加一些额外的特性: 1.编译器会为Case Class增 ...

  3. shell编程之条件语句(文件测试,test命令,字符串和逻辑测试,if单支语句,if双支语句,if多支语句,case命令,用if写跑步小实验)

    文章目录 shell编程之条件语句 条件测试 test命令 整数值测试 free -m 提供了更简洁的查看系统内存使用情况: 字符串和逻辑测试 字符串 逻辑测试 一元运算符,二元运算符和三元运算符 i ...

  4. scala 模式匹配详解 1

    什么是模式? 一些刚从java转到scala的同学在开发的过程中犹如深陷沼泽,因为很多的概念或风格不确定,scala里有很多的坑,模式匹配也算一个.我整理了一下自己所理解的概念,以及一些例子.这个系列 ...

  5. scala 模式匹配概念及用法示例

    概念 可以理解为升级版的java switch 1 java中的switch -case是一个分支结构,用于匹配整型(byte,short,int,char),字符串,枚举. (long类型不可以) ...

  6. scala 模式匹配 match

    文章目录 一.match 基本介绍 二.match 的细节和注意事项 三.模式匹配之条件守卫 四.模式匹配之变量匹配.常量匹配 五.模式匹配之类型匹配 六.模式匹配之数组匹配 七.模式匹配之集合匹配 ...

  7. scala 模式匹配

    Scala 中的模式匹配类似于 Java 中的 switch 语法 1 基本语法 模式匹配语法中,采用 match 关键字声明,每个分支采用 case 关键字进行声明,当需 要匹配时,会从第一个 ca ...

  8. Scala模式匹配详解

    前言 Scala 中的模式匹配类似于 Java 中的 switch 语法 Java中的switch语法,default就是都不符合 int i = 10 switch (i) {case 10 :Sy ...

  9. Scala模式匹配和类型系统

    Scala模式匹配和类型系统 1.模式匹配比java中的switch case强大很多,除了值,类型,集合等进行匹配,最常见的Case class进行匹配,Master.scala有大量的模式匹配. ...

最新文章

  1. MySQL数据模型图导出ddl脚本_DB2中导出数据库的所有DDL脚本.
  2. Azure平台管理员必须了解的安全问题
  3. windows driver 分配内存
  4. PL/SQL 数据库连接工具的下载、安装与使用实例演示
  5. PAT 1074. Reversing Linked List (25)
  6. HTML列表标签,讲的明明白白!
  7. 中国首个 SaaS 模式的云告警平台 iOS 版 APP 上线
  8. 玩转vim之vim插件Ctags
  9. 广东2022年上半年系统集成项目管理工程师下午真题及答案解析
  10. [入门] 探索FireMonkey的StyleBook皮肤控件的使用(附示例程序)
  11. 六大设计原则----依赖倒置原则
  12. 计算机vga,电脑启用vga模式是什么意思?怎么修复?
  13. java 订单支付宝_Java支付宝订单查询
  14. 揽月摘星 | 第 13 届金鼠标数字营销大赛得奖名单出炉,知家斩获 5 项大奖
  15. AIDL中的in、out、inout的区别
  16. 文件服务器均衡负载,文件服务器均衡负载
  17. 遇见物联,西电开启智慧校园新大门
  18. 一年级课程表(4月11日-4月15日)
  19. 计算机网络原理第六篇 应用层
  20. webview Dialog在onPageFinished()中无法dismiss

热门文章

  1. 《机器学习实战》第十三章 PCA
  2. VTK:隐式布尔值demo用法实战
  3. wxWidgets:wxModalDialogHook类用法
  4. boost::mpl::times相关的测试程序
  5. boost::hana::difference用法的测试程序
  6. boost::iostreams::detail::path用法的测试程序
  7. boost::hana::capture用法的测试程序
  8. boost::gil::packed_channel_value用法的测试程序
  9. 使用Boost.Compute类在GPU上设置和运行简单的矢量加法内核
  10. VTK:可视化之SceneBounds