[Scala]學習筆記四——模式匹配 match
阿新 • • 發佈:2018-11-12
一、最基本的模式匹配
例子:
//格式為: //變數 match{ // case value1=>程式碼 // case value2=>程式碼 // …… // case _=>程式碼 //} def judgeGrade(grade:String): Unit ={ grade match{ case "A"=>println("Excellent") case "B"=>println("Good") case "C"=>println("Just so so") case _=>println("You need work hard") } } judgeGrade("A") judgeGrade("D")
二、加條件進行模式匹配,可以雙重過濾
//在最後萬用字元的case中新增if語句,來雙重過濾 def judgeGrade(name:String,grade:String): Unit ={ grade match{ case "A"=>println("Excellent") case "B"=>println("Good") case "C"=>println("Just so so") case _ if(name=="Nina")=>println("You are absent the exam") case _=>println("You need work hard") } } judgeGrade("Lily","A") judgeGrade("Nina","D") judgeGrade("Sam","D")
三、Array匹配模式
def greeting(array:Array[String]): Unit = { //對陣列中的內容進行匹配 array match { case Array("Zhangsan") => println("Hi, " + "Zhangsan") //陣列中僅有這個元素 case Array(x, y) => println("Hi, " + x + " and " + y) //陣列中有兩個元素 case Array("Zhangsan", _*) => println("Hi, " + "Zhangsan" + " and other friends") //陣列中有多個元素,但開頭的元素為zhangsan case _ => println("Hi, everybody") //陣列中的內容為其他情況 } } greeting(Array("Zhangsan")) greeting(Array("Lisi","Nina")) greeting(Array("Zhangsan","Lisi","Wangwu")) greeting(Array("Lisi","Wangwu","Zhangsan")) 結果: Hi, Zhangsan Hi, Lisi and Nina Hi, Zhangsan and other friends Hi, everybody
四、List匹配模式
def greeting(list:List[String]): Unit = {
//對陣列中的內容進行匹配
list match {
case "Zhangsan"::Nil => println("Hi, " + "Zhangsan") //陣列中僅有這個元素
case x::y::Nil => println("Hi, " + x + " and " + y) //陣列中有兩個元素
case "Zhangsan"::tail => println("Hi, " + "Zhangsan" + " and other friends") //陣列中有多個元素,但開頭的元素為zhangsan
case _ => println("Hi, everybody") //陣列中的內容為其他情況
}
}
greeting(List("Zhangsan"))
greeting(List("Lisi","Nina"))
greeting(List("Zhangsan","Lisi","Wangwu"))
greeting(List("Lisi","Wangwu","Zhangsan")
結果:
Hi, Zhangsan
Hi, Lisi and Nina
Hi, Zhangsan and other friends
Hi, everybody
五、型別匹配
//型別匹配
def typeMatch(word:Any){
word match {
case n:Int=>println("Int")
case s:String=>println("String")
case m:Map[_,_]=>m.foreach(println)
case _=>println("Other type")
}
}
typeMatch(1)
typeMatch("1")
typeMatch(1f)
typeMatch(Map("name"->"Nina"))
結果:
Int
String
Other type
(name,Nina)
六、異常處理
try{
val i=10/0
println(i)
}catch{
case e:ArithmeticException=>println("除數不能為0")
case e:Exception=>println("出錯了")
}finally {
//一定會執行的語句
//若需要讀取檔案,這裡則需要關閉一些檔案流
}
結果:
除數不能為0
七、case class模式匹配
def matchOffer(person: Person): Unit ={
person match{
case CTO(name,floor)=>println("CTO "+name +" is on "+ floor)
case Employee(name,floor)=>println("Employee "+name +" is on "+ floor)
case _=>println("Other")
}
}
matchOffer(CTO("Nina","22"))
matchOffer(Employee("Nina","2"))
matchOffer(Other("Nina"))
//定義了幾個類
class Person
case class CTO(name:String,floor:String) extends Person
case class Employee(name:String,floor:String) extends Person
case class Other(name:String) extends Person
結果:
CTO Nina is on 22
Employee Nina is on 2
Other
八、Some None模式匹配
val map=Map("Nina"->"A","Lily"->"B")
//Some和None的模式匹配
def gradeMatch(name:String): Unit = {
val grade = map.get(name)
grade match {
case Some(grade) => println(name + " your grade is " + grade)
case None => println("Sorry...")
}
}
gradeMatch("Nina")
gradeMatch("Lily")
gradeMatch("Zhangsan")
結果:
Nina your grade is A
Lily your grade is B
Sorry...