scala中case的用法
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的用法相关推荐
- IsNull 和 SQL语句中CASE WHEN用法
[转]IsNull 和 SQL语句中CASE WHEN用法收藏 [转]IsNull 和 SQL语句中CASE WHEN用法 1.ISNULL 使用指定的替换值替换 NULL. ...
- bash中case的用法
看到一些很实用的脚本,由于之前对于bash脚本的积累都比较离散,没有一个全面的了解,在这里记录一下: bash的case语句用法 case语句的语法规则是: case $变量名 in 模式1)命令序列 ...
- Oracle中case when用法
转载自:http://www.cnblogs.com/eshizhan/archive/2012/04/06/2435493.html CASE WHEN 表达式有两种形式 --简单Case函数 CA ...
- update case when 多字段,多条件, mysql中case when用法
文章目录 前言 sql示例 普通写法: update case when写法 update case when 多字段写法 case when语法 case when 的坑 1.不符合case whe ...
- scala中yeild举例用法
Scala中的yield的主要作用是记住每次迭代中的有关值,并逐一存入到一个数组中. 用法如下: for {子句} yield {变量或表达式} 具体举例如下,该例子获取文本文件中包含指定关键字的相关 ...
- MySQL中Case When用法详解
最近,在学习Hive基础知识时,遇到了遇到了Case When Else End语法,以前学习MySQL时忽略了这部分知识点,现总结一下相关的知识给大家.首先练习一个例子如下: 一.学生课程成绩统计 ...
- SQLServer中Case的用法
< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> CASE 可能是 SQL ...
- Scala中Case Class使用详细解析
2019独角兽企业重金招聘Python工程师标准>>> 简介 Case Class是样例类,能够被优化以用于模式匹配. 构造器中的参数如果不被声明为var的话,默认是val类型 ...
- scala中case class与一般的class的区别
(1)case class初始化的时候可以不用new,也可以加上,但是class必须加new (2)默认实现了equals.hashCode方法 (3)默认是可以序列化的,实现了Serializalb ...
最新文章
- 项目经理的超越(三)人际优先,做事上的超越
- VM虚拟机Centos系统时间同步
- android文件存储教程,android开发基础教程—文件存储功能实现
- 玻璃体混浊不要转眼球
- linux mariadb 乱码,MariaDB插入中文数据乱码解决过程
- 不同组织物料类别差异列表
- pytorch---模型加载与保存(6)通过设备保存/加载模型
- spring boot 拦截器 或 Spring AOP 方式记录请求日志
- 如何循序渐进向DotNet架构师发展(转)
- 【更新】ReSharper v2018.3发布
- Python爬虫教程,利用Python采集QQ群成员信息
- 支付宝接口对接指南(四、回调通知对接:websoket方式)【保姆级】
- 阿里云DataV数据过滤器取Value值大于等于25的数据(1)
- 什么是混合移动App开发【重点学习系列---干货十足--一文详解】
- Error on rename ofXXXXXX (errno: 152)
- c语言如何计算中位数,如何计算中位数?
- 【大论文】可扩展机器学习的并行与分布式优化算法综述_亢良伊2017
- 数字化时代-6:从经济体所有制看赚钱的规模
- phpstorm集成phpunit
- Android判断手机ROM 手机os
热门文章
- Ubuntu14.04 LTS更新源
- Parameter 'arg0' not found. Available parameters are [xxx, xxx, param1, param2]
- 修正MP4文件头信息实现流式加载及播放
- 2.基础语法:手指抽筋模拟器
- 用css改变图片背景色颜色
- 操作系统(一)什么是操作系统
- html转pdf 图片跨域问题解决
- Matlab nargin
- Firebase使用总结(早期)
- 用Django实现网页Url使用汉语拼音PinYin作为SEO优化的实现方法