scala模式匹配

1.基础match case(类似java里switch case,但功能强大些)

object MatchApp {

  def main(args: Array[String]): Unit = {
val is = Array("a","b","c","d")
val i = is(Random.nextInt(is.length))//随机取数组中的一个值
i match {
case "a" => println("aaa")
case "b" => println("bbb")
case "c" => println("ccc")
case _ => println("没有此匹配")
}
}

2、带条件的模式匹配

package top.ruandb.scala.Course05

import scala.util.Random

object MatchApp {

  def main(args: Array[String]): Unit = {
judgeGrade("jack","A")//非常好
judgeGrade("lucy","B")//好
judgeGrade("lucy","D")//lucy同学,该努力学习了
judgeGrade("jack","D")//同学,该努力学习了
} def judgeGrade(name:String ,grade:String): Unit ={
grade match{
case "A" => println("非常好")
case "B" => println("好")
case "C" => println("一般")
case _ if(name == "lucy") => println(name+"同学,该努力学习了")//带条件筛选
case _ => println("同学,该努力学习了")
}
}
}

3、Array模式匹配

package top.ruandb.scala.Course05

import scala.util.Random

object MatchApp {

  def main(args: Array[String]): Unit = {

    greeting(Array("a"))//hi,a
greeting(Array("b","c" ,"d"))//hi.everyone
greeting(Array("a","b","c" ,"d"))//hi,a and others
greeting(Array("c" ,"d"))//hi,c d } def greeting(array:Array[String]): Unit ={ array match {
case Array("a") => println("hi,a")//匹配数组Array("a")
case Array(x,y) => println("hi,"+ x + " "+ y)//匹配两个元素的数组
case Array("a",_*) => println("hi,a and others")//匹配以a开头的数组
case _ => println("hi.everyone")
}
} }

4、List模式匹配

package top.ruandb.scala.Course05

import scala.util.Random

object MatchApp {

  def main(args: Array[String]): Unit = {

    greeting(List("a"))//hi,a
greeting(List("b","c" ,"d"))//hi.everyone
greeting(List("a","b","c" ,"d"))//hi,a and others
greeting(List("c" ,"d"))//hi,c d
} def greeting(list:List[String]): Unit ={ list match {
case "a"::Nil => println("hi,a")//匹配只含a的List
case x::y::Nil => println("hi,"+ x + " "+ y)//匹配两个元素的List
case "a"::tail => println("hi,a and others")//匹配以a开头的List
case _ => println("hi.everyone")
}
} }

5、类型匹配

package top.ruandb.scala.Course05

import scala.util.Random

object MatchApp {

  def main(args: Array[String]): Unit = {

    matchType(1)//Int: 1
matchType("str")//String; str
matchType(Map("lucy"->18,"jack"->19,"kangkang"->99))//(lucy,18)(jack,19)(kangkang,99)
matchType(3.14)//其他类型 }
def matchType(obj:Any): Unit ={
obj match{
case x:Int =>println("Int: "+ x )
case s:String =>println("String; "+s)
case m:Map[_,_] => m.foreach(println)
case _ => println("其他类型") }
}
}

6、异常处理

package top.ruandb.scala.Course05

object ExceptionApp {

  def main(args: Array[String]): Unit = {
try{
val i = 100/0 //ArithmeticException
println(i)
}catch {
case e:ArithmeticException => println("分母不能为0")
case e:Exception => println(e.getMessage)
}finally {
println("用于释放资源,一定能执行")
}
}
}

7、class模式匹配

package top.ruandb.scala.Course05

import scala.util.Random

object MatchApp {

  def main(args: Array[String]): Unit = {

    caseClassMatch(Cto("lucy","99"))
caseClassMatch(Employee("jack","7"))
caseClassMatch(Others("kangkang"))
} def caseClassMatch(person:Person): Unit ={
person match{
case Cto(name,floor) => println("hi,"+name +" "+ floor)
case Employee(name,floor) =>println("hi,"+name +" "+ floor)
case Others(name) => println("hi,"+name )
}
} class Person
case class Cto(name:String,floor:String) extends Person
case class Employee(name:String,floor:String) extends Person
case class Others(name:String) extends Person
}

8、Some,None模式匹配

package top.ruandb.scala.Course05

import scala.util.Random

object MatchApp {

  def main(args: Array[String]): Unit = {

    getGrade("lucy")//your grade is A
getGrade("jack")//your grade is B
getGrade("kangkang")//without your score } val grades = Map("lucy"->"A","jack"->"B")
def getGrade(name:String): Unit ={
val grade = grades.get(name)
grade match{
case Some(grade) => println("your grade is "+ grade)
case None =>println("without your score")
}
}
}

Scala学习——模式匹配的更多相关文章

  1. Scala学习教程笔记三之函数式编程、集合操作、模式匹配、类型参数、隐式转换、Actor、

    1:Scala和Java的对比: 1.1:Scala中的函数是Java中完全没有的概念.因为Java是完全面向对象的编程语言,没有任何面向过程编程语言的特性,因此Java中的一等公民是类和对象,而且只 ...

  2. Scala 学习之路(十一)—— 模式匹配

    一.模式匹配 Scala支持模式匹配机制,可以代替swith语句.执行类型检查.以及支持析构表达式等. 1.1 更好的swith Scala不支持swith,可以使用模式匹配match...case语 ...

  3. scala学习之路一

    所谓学习,那么首先就先简单介绍一下scala吧 1.scala的介绍 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性. Scal ...

  4. Scala学习资源

    Scala学习资源: Scala官方网站:http://www.scala-lang.org/ Scala github:https://github.com/scala/scala Twitter ...

  5. 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习

    下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...

  6. 机器学习(三)--- scala学习笔记

    Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...

  7. 【Scala】Scala学习资料

    Scala学习资料 java 树形 分类器_百度搜索 决策树分类器-Java实现 - CSDN博客 KNN分类器-Java实现 - CSDN博客 学习:java设计模式—分类 - 飞翔荷兰人 - 博客 ...

  8. Scala学习网址

    scala学习网址为:https://twitter.github.io/scala_school/zh_cn https://www.zhihu.com/question/26707124

  9. Spark之Scala学习

    1. Scala集合学习: http://blog.csdn.net/lyrebing/article/details/20362227 2. scala实现kmeans算法 http://www.t ...

随机推荐

  1. 用户自定义协议client/server代码示例

    用户自定义协议client/server代码示例 代码参考链接:https://github.com/sogou/workflow message.h message.cc server.cc cli ...

  2. 用Java如何设计一个阻塞队列,然后说说ArrayBlockingQueue和LinkedBlockingQueue

    前言 用Java如何设计一个阻塞队列,这个问题是在面滴滴的时候被问到的.当时确实没回答好,只是说了用个List,然后消费者再用个死循环一直去监控list的是否有值,有值的话就处理List里面的内容.回 ...

  3. (1)http基础

    HTTP服务基础 • 基于 B/S (Browser/Server)架构的网页服务– 服务端提供网页– 浏览器下载并显示网页 • Hyper Text Transfer Protocol,超文本传输协 ...

  4. 【UG二次开发】创建、查询、编辑成型特征的函数

    创建成型特征函数UF_MODL_create_boss 通过设置凸台的参数建立凸台特征UF_MODL_create_rect_pad 通过设置矩形凸垫的参数建立矩形凸垫特征UF_MODL_create ...

  5. echarts迁移图动态加载

    迁移图 获取迁移城市的经纬度 可以调用高德的接口,实现根据地名找寻经纬度的方法 #!/usr/bin/env python3 #-*- coding:utf-8 -*- ''' 利用高德地图api实现 ...

  6. Nexus 安装配置教程

    目录 为什么使用 Nexus Docker 模式安装 Nexus 使用 data volume 使用本地目录 Nexus 配置 配置 Blob Stores Nexus 使用 包下载 包上传 参考 为 ...

  7. 使用mockjs模拟分页请求

    首先安装mockjs npm install mockjs --save-dev 创建mock.js //mock.js const Mock = require("mockjs" ...

  8. cmake使用笔记,一些常用的命令

    我的工程目录如下: │ CMakeLists.txt ├─cmake_tutorial │ CMakeLists.txt │ cmake_tutorial.cpp │ cmake_tutorial.h ...

  9. 诸多改进!Superset 1.2.0 正式发布!

    Apache Superset 是一个现代的.企业级的轻量BI平台,提供了大量数据可视化组件. 距离superset上一个版本发布已经过了近三个月的时间,我们终于等到了1.2.0版本. 之前就曾提到过 ...

  10. 一QT获取当前时间和日期

    获取日期和时间使用QDateTime类,该类中有一个静态成员函数可以返回当前的时间信息 我们可以直接调用这个静态函数获取当前时间 QDateTime time = QDateTime::current ...