scala 入门(四)scala模式匹配

前言

在上一章中对scala的集合型数据结构做了一个初步的认识及入门,这一节将简单介绍一下scala中的模式匹配。

基本数据类型的模式匹配

变量 match {
case value1 => 代码1
case value2 => 代码2
case _ => 代码n(最终出口)
}

遗憾的是在python中没有类似的写法,我们无法进行对比。但在js里却有类似的写法。但是在scala中又对break进行了省略。
示例代码

  def judgeGrade(grade:String): Unit ={
    grade match{
      case "A" => println("优秀....")
      case "B" => println("良好....")
      case "C" => println("及格....")
      case _ => println("不及格....")
    }
  }

通过匹配到不同的值,就进入了对应的执行语句中。

case _ => println("不及格....")

其中 这句话是整个模块的出口,当全部都匹配不到时的输出结果。

当然这种匹配模式也可以加入更多的匹配条件。

  def judgeGrade(grade:String,school:String): Unit ={
    grade match{
      case "A" => println("优秀....")
      case "B" => println("良好....")
      case "C" => println("及格....")
      case _ if(school == "高中") => println("高中了需要努力了")
      case _ if(school == "高中") => println("不及格....")
    }
  }
数组匹配

和基本匹配模式一样,改变的只是要匹配的对象变成了数组

  def greetingLanguage(array:Array[String]): Unit ={
    array match {
      case Array("Python") => println("Hi:Python")
      case Array(x,y) => println("hi"+x+" ," + y)
      case Array("Python", _*) => println("except Python we have many programing language")
      case _ => println("Hi: There are others situation")
    }
  }
  greetingLanguage(Array("Python"))
  greetingLanguage(Array("Python","Scala"))
  greetingLanguage(Array("Python","scala","java"))
  greetingLanguage(Array("java","scala","Python")

在这里插入图片描述

列表匹配

列表匹配跟数组匹配就十分类似了

  def greetingLanguage(list:List[String]): Unit ={
    list match {
      case "Python"::Nil => println("Hi:Python")
      case x::y::Nil => println("hi"+x+" ," + y)
      case "Python"::tail => println("except Python we have many programing language")
      case _ => println("Hi: There are others situation")
    }
  }
  greetingLanguage(List("Python"))
  greetingLanguage(List("Python","Scala"))
  greetingLanguage(List("Python","scala","java"))
  greetingLanguage(List("java","scala","Python"))

在这里插入图片描述

类型匹配

根据匹配到变量的不同类型,走不同的代码块

  def matchType(obj:Any): Unit ={
    obj match {
      case x:Int => println("Int")
      case x:String => println("String")
      case x:Array[String] => println("Array")
    }
  }
类匹配

同样match 也支持类匹配

  class Person
  case class Student(name:String,grade:Int) extends Person
  case class Driver(name:String,qualification:String) extends Person
  case class Other(name:String) extends Person

  def caseClassMatch(person: Person): Unit ={

    person match {
      case Student(name,grade) => println("student name is "+name+" grade is"+grade)
      case Driver(name,qualification) => println("driver name is "+name+" qualification is"+qualification)
      case _ => println("other")
    }

  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值