更新時間:2023-08-18 來源:黑馬程序員 瀏覽量:
Scala提供了強大的模式匹配機制,最常見的模式匹配就是match語句,主要應用于從多個分支中進行選擇的場景。不僅如此,Scala還提供了樣例類,它可以對模式匹配進行優(yōu)化,提高匹配的速率。接下來,針對Scala提供的模式匹配和樣例類進行詳細講解。
Scala中的模式匹配是由 match case組成,它類似于Java中的switch case,即對一個值進行條件判斷,針對不同的條件,進行不同的處理。
模式匹配的語法格式如下:
表達式match{ case模式1=>語句1 case模式2=>語句2 case模式3=>語句3 }
上述語法格式中,match關鍵字主要用來描述一個表達式,位于表達式位置的后面;case關鍵字主要用來描述和表達式結果進行比較后的模式,若發(fā)現有一個模式可以與表達式結果進行匹配,則執(zhí)行所匹配模式對應的語句,而剩下的模式就不會繼續(xù)進行匹配。
下面,定義一個方法matchTest(),方法的參數是一個整型字段,而方法的調用則是對參數進行模式匹配,若參數匹配的是1,則打印輸出one;若參數匹配的是2,則打印輸出two;若參數匹配的是_,則打印輸出many,具體實現代碼如下所示。
object PatternMatch{ def main (args: Array[String]) { println (matchTest(3)) } //模式匹配 def matchTest(x: Int): String =x match { case 1 =>"one" case 2 =>"two" case _ =>"many" } }
第3行代碼調用了matchTest()方法,傳入的參數是3,此時,與case_進行匹配,由于case_對應的執(zhí)行語句是打印輸出many,所以控制臺會輸出many控制臺的輸出結果如圖所示。
模式匹配操作控制臺輸出的結果
在Scala中,使用case關鍵字來定義的類被稱為樣例類。樣例類是一種特殊的類,經過優(yōu)化可以被用于模式匹配。下面,使用case定義樣例類Person,并將該樣例類應用到模式匹配中,具體代碼如文件所示。
object CaseClass { //樣例類 case class Person (name: String, age: Int) def main (arga: Array[String]) { val alice =new Person ("Alice", 25) val bob =new Person ("Bob", 32) val charlie =new Person("Charlie", 32) for (person <-List (alice, bob, charlie)) { //模式四配 person natch { case Person("Alice", 25) ?>println("Hi Alice!") case Person("Bob", 32) ?>println ("Hi Bob!") case Person (name, age) m> println("Name: "+name +"\t"+"Age: " +age) } } } }
上述代碼中,第3行代碼創(chuàng)建了一個樣例類Person;第4~14行代碼是主方法main(),在主方法中創(chuàng)建了樣例類Person的3個實例對象alice、bob和charlie,并通過模式匹配將實例對象與樣例類Person進行匹配,從而進行不同的處理。
運行上面的代碼,效果如圖所示。
樣例類的運行結果