scala中没有switch,但是有case,其case相当强大,有各种不同的匹配方式。

一.简单匹配,值匹配:

例 a:

val bools = List(true, false)
for (bool <- bools) {
bool match {
case true => println("heads")
case false => println("tails")
case _ => println("something other than heads or tails (yikes!)")
}
}

例 b:

import scala.util.Random
val randomInt = new Random().nextInt(10)
randomInt match {
case 7 => println("lucky seven!")
case otherNumber => println("boo, got boring ol' " + otherNumber)
}

二. 类型匹配

例a:

val sundries = List(23, "Hello", 8.5, 'q')for (sundry <- sundries) {sundry match {case i: Int => println("got an Integer: " + i)case s: String => println("got a String: " + s)case f: Double => println("got a Double: " + f)case other => println("got something else: " + other)}
}

三 根据顺序匹配

val willWork = List(1, 3, 23, 90)
val willNotWork = List(4, 18, 52)
val empty = List()
for (l <- List(willWork, willNotWork, empty)) {l match {case List(_, 3, _, _) => println("Four elements, with the 2nd being '3'.")case List(_*) => println("Any other list with 0 or more elements.")}
}

四 case里面用 guard 的数组匹配:

val tupA = ("Good", "Morning!")
val tupB = ("Guten", "Tag!")
for (tup <- List(tupA, tupB)) {tup match {case (thingOne, thingTwo) if thingOne == "Good" =>println("A two-tuple starting with 'Good'.")case (thingOne, thingTwo) =>println("This has two things: " + thingOne + " and " + thingTwo)}
}

五 对象深度匹配:

case class Person(name: String, age: Int)
val alice = new Person("Alice", 25)
val bob = new Person("Bob", 32)
val charlie = new Person("Charlie", 32)
for (person <- List(alice, bob, charlie)) {person match {case Person("Alice", 25) => println("Hi Alice!")case Person("Bob", 32) => println("Hi Bob!")case Person(name, age) =>println("Who are you, " + age + " year-old person named " + name + "?")}
}

六 正则表达式匹配:

val BookExtractorRE = """Book: title=([^,]+),\s+authors=(.+)""".r
val MagazineExtractorRE = """Magazine: title=([^,]+),\s+issue=(.+)""".rval catalog = List("Book: title=Programming Scala, authors=Dean Wampler, Alex Payne","Magazine: title=The New Yorker, issue=January 2009","Book: title=War and Peace, authors=Leo Tolstoy","Magazine: title=The Atlantic, issue=February 2009","BadData: text=Who put this here??"
)for (item <- catalog) {item match {case BookExtractorRE(title, authors) =>println("Book \"" + title + "\", written by " + authors)case MagazineExtractorRE(title, issue) =>println("Magazine \"" + title + "\", issue " + issue)case entry => println("Unrecognized entry: " + entry)}
}

scala中case的用法相关推荐

  1. IsNull 和 SQL语句中CASE WHEN用法

    [转]IsNull 和 SQL语句中CASE WHEN用法收藏   [转]IsNull 和 SQL语句中CASE WHEN用法 1.ISNULL     使用指定的替换值替换   NULL.      ...

  2. bash中case的用法

    看到一些很实用的脚本,由于之前对于bash脚本的积累都比较离散,没有一个全面的了解,在这里记录一下: bash的case语句用法 case语句的语法规则是: case $变量名 in 模式1)命令序列 ...

  3. Oracle中case when用法

    转载自:http://www.cnblogs.com/eshizhan/archive/2012/04/06/2435493.html CASE WHEN 表达式有两种形式 --简单Case函数 CA ...

  4. update case when 多字段,多条件, mysql中case when用法

    文章目录 前言 sql示例 普通写法: update case when写法 update case when 多字段写法 case when语法 case when 的坑 1.不符合case whe ...

  5. scala中yeild举例用法

    Scala中的yield的主要作用是记住每次迭代中的有关值,并逐一存入到一个数组中. 用法如下: for {子句} yield {变量或表达式} 具体举例如下,该例子获取文本文件中包含指定关键字的相关 ...

  6. MySQL中Case When用法详解

    最近,在学习Hive基础知识时,遇到了遇到了Case When Else End语法,以前学习MySQL时忽略了这部分知识点,现总结一下相关的知识给大家.首先练习一个例子如下: 一.学生课程成绩统计 ...

  7. SQLServer中Case的用法

    < DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> CASE 可能是 SQL ...

  8. Scala中Case Class使用详细解析

    2019独角兽企业重金招聘Python工程师标准>>> 简介   Case Class是样例类,能够被优化以用于模式匹配. 构造器中的参数如果不被声明为var的话,默认是val类型 ...

  9. scala中case class与一般的class的区别

    (1)case class初始化的时候可以不用new,也可以加上,但是class必须加new (2)默认实现了equals.hashCode方法 (3)默认是可以序列化的,实现了Serializalb ...

最新文章

  1. 项目经理的超越(三)人际优先,做事上的超越
  2. VM虚拟机Centos系统时间同步
  3. android文件存储教程,android开发基础教程—文件存储功能实现
  4. 玻璃体混浊不要转眼球
  5. linux mariadb 乱码,MariaDB插入中文数据乱码解决过程
  6. 不同组织物料类别差异列表
  7. pytorch---模型加载与保存(6)通过设备保存/加载模型
  8. spring boot 拦截器 或 Spring AOP 方式记录请求日志
  9. 如何循序渐进向DotNet架构师发展(转)
  10. 【更新】ReSharper v2018.3发布
  11. Python爬虫教程,利用Python采集QQ群成员信息
  12. 支付宝接口对接指南(四、回调通知对接:websoket方式)【保姆级】
  13. 阿里云DataV数据过滤器取Value值大于等于25的数据(1)
  14. 什么是混合移动App开发【重点学习系列---干货十足--一文详解】
  15. Error on rename ofXXXXXX (errno: 152)
  16. c语言如何计算中位数,如何计算中位数?
  17. 【大论文】可扩展机器学习的并行与分布式优化算法综述_亢良伊2017
  18. 数字化时代-6:从经济体所有制看赚钱的规模
  19. phpstorm集成phpunit
  20. Android判断手机ROM 手机os

热门文章

  1. Ubuntu14.04 LTS更新源
  2. Parameter 'arg0' not found. Available parameters are [xxx, xxx, param1, param2]
  3. 修正MP4文件头信息实现流式加载及播放
  4. 2.基础语法:手指抽筋模拟器
  5. 用css改变图片背景色颜色
  6. 操作系统(一)什么是操作系统
  7. html转pdf 图片跨域问题解决
  8. Matlab nargin
  9. Firebase使用总结(早期)
  10. 用Django实现网页Url使用汉语拼音PinYin作为SEO优化的实现方法