//模式匹配的基础语法
def match1(x:Char):Unit = x match {
case 'A' => println("verygood")
case 'B' => println("good")
case 'C' => println("soso")
case _ => println("work harder")
}
match1('D')
//模式匹配中使用if守卫模式
def match2(x:Char):Unit = x match {
case 'A' => println("verygood")
case 'B' => println("good")
case 'C' => println("soso")
case _ if x=="aa" => println(x+"not bad")
case _ => println("work harder")
}
match2('A')
//在模式匹配中进行变量赋值
def match3(id:String,subject:String):Unit = id match {
case "1" => println("English")
case "2" => println("Chinese")
case _ if subject=="math" => println(subject)
case _ => println("this subject id is "+id)
}
match3("4","art" )
//对类型进行模式匹配(案例:异常处理)
def match4(e:Exception):Unit = e match {
case e:IndexOutOfBoundsException => println("IndexOutOfBoundsException")
case e:FileNotFoundException => println("FileNotFoundException")
case e:NullPointerException => println("NullPointerException")
case _:Exception => println("Exception")
}
match4(new IndexOutOfBoundsException)
//对ArrayheList进行模式匹配
//Array
def match5(arr:Array[String]):Unit = {
arr match {
case Array("KB09") => println("Hello KB09")
case Array(girl1,girl2,girl3) => println("Hello"+girl1+"&"+girl2+"&"+girl3)
case Array("KB09",_*) => println("Hello KB09*")
case _ => println("who are you ?")
}
}
var arr1 = Array("KB09","KN05","KN07","KN02") //Hello KB09*
var arr2 = Array("KB09") //Hello KB09
var arr3 = Array("KB09","KN05","KN07") //Hello KB09 & KB05 &KB07
var arr4 = Array("KB02","KN05","KN07","KN09") //who are you ?
//样例类和模式匹配
class Person
case class Teacher(name:String,subject:String) extends Person
case class Student(name:String,classroom:Int) extends Person
case class Worker(name:String,work:String) extends Person
case class Stranger() extends Person
def match6(p:Person):Unit = p match {
case Teacher("DiLi","Chinese") => println("DiLi 老师找到了") //和if守卫模式一样,精确匹配
case Teacher(name,subject) => println(s"hello,$name teacher,welcome to school,you teach subject is "+subject)
case Student(name,classroom) => println(s"hello,$name,welcome to school,you classroom is "+classroom)
case Worker(name,work) if work == "repairman" => println(s"hello,$name,welcome to school,you work is "+work)
case Worker(name,work) => println(s"hello,$name,welcome to school,you work is "+work)
case _ => println("you can not into school")
}
match6(Teacher("Loe","English")) //hello,Loe teacher,welcome to school,you teach subject is English
match6(Student("Joie",6)) //hello,Joie,welcome to school,you classroom is 6
match6(Worker("Jay","repairman")) //hello,Jay,welcome to school,you work is repairman
match6(Worker("Tan","fixman")) //hello,Tan,welcome to school,you work is fixman
match6(Stranger()) //you can not into school
//Option与模式匹配
val map = Map("zs"->"a","ls"->"b","ww"->"c")
def match7(name:String):Unit = {
var score = map.get(name)
score match {
case Some(score) => println(name+"成绩为"+score)
case None => println("没有"+name+"的成绩")
}
}
match7("zs") //zs成绩为a
match7("Leo") //没有Leo的成绩