更新時(shí)間:2023-08-18 來(lái)源:黑馬程序員 瀏覽量:
Scala提供了強(qiáng)大的模式匹配機(jī)制,最常見(jiàn)的模式匹配就是match語(yǔ)句,主要應(yīng)用于從多個(gè)分支中進(jìn)行選擇的場(chǎng)景。不僅如此,Scala還提供了樣例類(lèi),它可以對(duì)模式匹配進(jìn)行優(yōu)化,提高匹配的速率。接下來(lái),針對(duì)Scala提供的模式匹配和樣例類(lèi)進(jìn)行詳細(xì)講解。
Scala中的模式匹配是由 match case組成,它類(lèi)似于Java中的switch case,即對(duì)一個(gè)值進(jìn)行條件判斷,針對(duì)不同的條件,進(jìn)行不同的處理。
模式匹配的語(yǔ)法格式如下:
表達(dá)式match{ case模式1=>語(yǔ)句1 case模式2=>語(yǔ)句2 case模式3=>語(yǔ)句3 }
上述語(yǔ)法格式中,match關(guān)鍵字主要用來(lái)描述一個(gè)表達(dá)式,位于表達(dá)式位置的后面;case關(guān)鍵字主要用來(lái)描述和表達(dá)式結(jié)果進(jìn)行比較后的模式,若發(fā)現(xiàn)有一個(gè)模式可以與表達(dá)式結(jié)果進(jìn)行匹配,則執(zhí)行所匹配模式對(duì)應(yīng)的語(yǔ)句,而剩下的模式就不會(huì)繼續(xù)進(jìn)行匹配。
下面,定義一個(gè)方法matchTest(),方法的參數(shù)是一個(gè)整型字段,而方法的調(diào)用則是對(duì)參數(shù)進(jìn)行模式匹配,若參數(shù)匹配的是1,則打印輸出one;若參數(shù)匹配的是2,則打印輸出two;若參數(shù)匹配的是_,則打印輸出many,具體實(shí)現(xiàn)代碼如下所示。
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行代碼調(diào)用了matchTest()方法,傳入的參數(shù)是3,此時(shí),與case_進(jìn)行匹配,由于case_對(duì)應(yīng)的執(zhí)行語(yǔ)句是打印輸出many,所以控制臺(tái)會(huì)輸出many控制臺(tái)的輸出結(jié)果如圖所示。
模式匹配操作控制臺(tái)輸出的結(jié)果
在Scala中,使用case關(guān)鍵字來(lái)定義的類(lèi)被稱(chēng)為樣例類(lèi)。樣例類(lèi)是一種特殊的類(lèi),經(jīng)過(guò)優(yōu)化可以被用于模式匹配。下面,使用case定義樣例類(lèi)Person,并將該樣例類(lèi)應(yīng)用到模式匹配中,具體代碼如文件所示。
object CaseClass { //樣例類(lèi) 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)建了一個(gè)樣例類(lèi)Person;第4~14行代碼是主方法main(),在主方法中創(chuàng)建了樣例類(lèi)Person的3個(gè)實(shí)例對(duì)象alice、bob和charlie,并通過(guò)模式匹配將實(shí)例對(duì)象與樣例類(lèi)Person進(jìn)行匹配,從而進(jìn)行不同的處理。
運(yùn)行上面的代碼,效果如圖所示。
樣例類(lèi)的運(yùn)行結(jié)果
Flask和Django路由映射的區(qū)別是什么?_python基礎(chǔ)培訓(xùn)
2023-08-18Python中,super函數(shù)具體的用法和場(chǎng)景是什么?_python入門(mén)培訓(xùn)
2023-08-18Python里面match()和search()的區(qū)別是什么?
2023-08-17簡(jiǎn)述Python的深淺拷貝以及應(yīng)用場(chǎng)景?_Python培訓(xùn)入門(mén)
2023-08-17Django是什么?為什么Django框架備受歡迎?
2023-08-17什么是大數(shù)據(jù),大數(shù)據(jù)行業(yè)發(fā)展現(xiàn)狀及未來(lái)趨勢(shì)怎么樣
2023-08-16