scala的模式匹配與java的switch case相似,但是switch case只能對值進(jìn)行判斷,scala還可以對類型,集合進(jìn)行模式匹配。其中最重要的是對case class 匹配。
其中有多種的匹配的模式:
常量變量匹配
def bigData(data : String): Unit ={
data match {
case "spark" => println("spark")
case "hadoop" => println("hadoop")
// case 中實(shí)際上是偏函數(shù)
case _ if data == "luo" => println("Luo") // 使用守衛(wèi)
case data_ if data_ == "carey" => println("carey") // 可以把值傳入賦給新的變量 匹配的是if 后面的變量
case _ => println("something else")
}
}
類型模式
def exception(e : Exception): Unit ={
e match {
case fileEx : FileNotFoundException => println("file not fuond",fileEx) // 新定義的變量只是接受賦值 而她的類型才是重要的
case _ : Exception => println("exception some what",e)
}
}
```
匹配集合 序列化模式
```
def match_collec(array : Any): Unit ={
array match {
case Array("scala") => println("scala arr")
case Array("hello","scala","mm") => println("mm")
case Array(one,two) => println(one,two) // 對數(shù)組的元素的個(gè)數(shù)進(jìn)行匹配 會(huì)將第一個(gè)值賦給one 第二個(gè)值賦給two 元組模式
case Array("hello",_*) => println("array start with hello") // 匹配開始為為hello的數(shù)組 使用_* 通配
case List(_,"one","owo") => println("match list") // 使用占位符
case _ => println("something else")
}
}
```
案例類
構(gòu)造器模式
```
// case class 的參數(shù)會(huì)自動(dòng)用 val修飾 編譯器自動(dòng)生成伴生對象 伴生對象的unapply() 方法 接受參數(shù)執(zhí)行就生成 新實(shí)例
class Person
case class Worker(name:String,age:Int) extends Person
case class Student(name:String,books:Int) extends Person
def match_construct(p: Person): Unit ={
p match {
//構(gòu)造器模式必須將Person類定義為case class,否則需要自己定義伴生對象并實(shí)現(xiàn)unapply方法。
case Worker(name,age) => println("worker",name,age)
case Student(name,books) => println(name,"have",books)
case _ => println("unknown this ")
}
}
```