首頁技術(shù)文章正文

Scala如何進(jìn)行模式匹配和樣例類匹配?【步驟教學(xué)】

更新時間:2023-08-18 來源:黑馬程序員 瀏覽量:

Scala提供了強大的模式匹配機制,最常見的模式匹配就是match語句,主要應(yīng)用于從多個分支中進(jìn)行選擇的場景。不僅如此,Scala還提供了樣例類,它可以對模式匹配進(jìn)行優(yōu)化,提高匹配的速率。接下來,針對Scala提供的模式匹配和樣例類進(jìn)行詳細(xì)講解。

模式匹配

Scala中的模式匹配是由 match case組成,它類似于Java中的switch case,即對一個值進(jìn)行條件判斷,針對不同的條件,進(jìn)行不同的處理。

模式匹配的語法格式如下:

表達(dá)式match{
    case模式1=>語句1
    case模式2=>語句2
    case模式3=>語句3
}

上述語法格式中,match關(guān)鍵字主要用來描述一個表達(dá)式,位于表達(dá)式位置的后面;case關(guān)鍵字主要用來描述和表達(dá)式結(jié)果進(jìn)行比較后的模式,若發(fā)現(xiàn)有一個模式可以與表達(dá)式結(jié)果進(jìn)行匹配,則執(zhí)行所匹配模式對應(yīng)的語句,而剩下的模式就不會繼續(xù)進(jìn)行匹配。

下面,定義一個方法matchTest(),方法的參數(shù)是一個整型字段,而方法的調(diào)用則是對參數(shù)進(jìn)行模式匹配,若參數(shù)匹配的是1,則打印輸出one;若參數(shù)匹配的是2,則打印輸出two;若參數(shù)匹配的是_,則打印輸出many,具體實現(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,此時,與case_進(jìn)行匹配,由于case_對應(yīng)的執(zhí)行語句是打印輸出many,所以控制臺會輸出many控制臺的輸出結(jié)果如圖所示。

1692352172596_結(jié)果.jpg

模式匹配操作控制臺輸出的結(jié)果

樣例類

在Scala中,使用case關(guān)鍵字來定義的類被稱為樣例類。樣例類是一種特殊的類,經(jīng)過優(yōu)化可以被用于模式匹配。下面,使用case定義樣例類Person,并將該樣例類應(yīng)用到模式匹配中,具體代碼如文件所示。

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進(jìn)行匹配,從而進(jìn)行不同的處理。

運行上面的代碼,效果如圖所示。

1692353332020_結(jié)果.jpg
樣例類的運行結(jié)果

分享到:
在線咨詢 我要報名
和我們在線交談!