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. Google Pixel 超分辨率--Super Resolution Zoom

    Google Pixel 超分辨率--Super Resolution Zoom Google 的Super Res Zoom技术,主要用于在zoom时增强画面细节以及提升在夜景下的效果. 文章的主要 ...

  2. Git 快速控制

    Git 快速控制 聊聊学习 Git 那些事 现在回想起来,其实接触 Git 的时候是在大一的时候表哥带入门的.当时因为需要做一个项目,所以他教如何使用 Git 将写好的代码推送到 GitHub 上,然 ...

  3. TensorRT 7.2.1 开发概要(上)

    TensorRT 7.2.1 开发概要(上) Abstract 这个TysRR7.2.1开发者指南演示了如何使用C++和Python API来实现最常用的深层学习层.它展示了如何使用深度学习框架构建现 ...

  4. 【VBA】查找字符串

    老婆饼里有老婆吗 Sub test() aaa = "老婆饼里有老婆吗" If InStr(aaa, "老婆") <> 0 Then Debug.p ...

  5. 【Azure 机器人】微软Azure Bot 编辑器系列(2) : 机器人/用户提问回答模式,机器人从API获取响应并组织答案 (The Bot Framework Composer tutorials)

    欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人. 在该系列文章中,每一篇都将通过添加更多的功能来构建机器人.当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather ...

  6. Transformers for Graph Representation

    Do Transformers Really Perform Badfor Graph Representation? microsoft/Graphormer: This is the offici ...

  7. npm ERR! Unexpected end of JSON input while parsing near '...'解决方法

    npm install时出现npm err! Unexpected end of JSON input while parsing near'...'错误 输入  npm cache clean -- ...

  8. 《面试补习》- Java集合知识梳理

    一.ArrayList ArrayList 底层数据结构为 动态数组 ,所以我们可以将之称为数组队列. ArrayList 的依赖关系: public class ArrayList<E> ...

  9. Unity不规则按钮点击区域(UGUI)

    文章目录 一. 前言 二. 最终效果 三. 实现 1.创建UICamera 2. UIPolygon节点 3. 编辑碰撞区域 5. 运行测试 6. UIPolygon代码 一. 前言 游戏开发中,可能 ...

  10. pod生命周期

    Pod生命周期 我们一般将pod对象从创建至终这段时间范围成为pod的生命周期,它主要包含以下的过程: pod创建过程 运行初始化容器(init container)过程 运行主容器(main con ...