一、簡介
Scala中的模式比對類似Java中的switch語句,且更加穩健,本文就将針對Scala中模式比對的一些基本執行個體進行介紹:
二、Scala中的模式比對
2.1 基本格式
Scala中模式比對的基本格式如下:
data match {
case ... => 執行語句
case _ => 執行語句
}
其中,data表示将要進行模式比對的對象,match是模式比對的關鍵字,後面緊跟的{}中包含若幹條比對的方向,且隻會比對其中滿足條件的第一條;對于每一條條件,都是以case關鍵字開頭,緊跟比對的模式,且_表示比對任何模式,接着是=>,指向對應的執行語句,下面是一個簡單的示例:
object main{
def main(args: Array[String]): Unit = {
var data:String = "Hadoop"
//模式比對語句
data match {
case "Spark" => println("No!")
case "Hadoop" => println("Yes")
}
var demo = 1 match {
//通配符_表示比對任何對象
case _ => println("Anything!")
}
}
}
可以看出,在第一個模式比對語句中,比對到對應的"Hadoop"字元串對象之後,執行了對應的語句;在第二個模式比對語句中,_指定了比對任意對象,并執行了對應的輸出;
2.2 結合條件語句
在我們的模式比對語句中,可以添加條件語句,在Scala中這叫做守衛,下面是一個簡單的例子:
object main{
def main(args: Array[String]): Unit = {
def isMale(Gender:Int)={
Gender match {
case 1 => println("Yes!Male!")
case 0 => println("No!Female!")
//添加守衛的模式比對語句
case _ if Gender != 0 & Gender != 1 => println("Unknown!")
}
}
//調用函數
isMale(0)
isMale(1)
isMale(2)
}
}
2.3 結合變量
在Scala的模式比對中,我們還可以在模式語句内直接賦以新變量,來與傳入的變量結合起來,對上面的例子稍加改造得到下面這個例子:
object main{
def main(args: Array[String]): Unit = {
def isMale(Gender:Int)={
Gender match {
case 1 => println("Yes!Male!")
case 0 => println("No!Female!")
//添加守衛的模式比對語句
case gender if gender != 0 & gender != 1 => {
println("Unknown!")
//在match語句中調用新變量
println("gender = " + gender)
}
}
}
//調用函數
isMale(2)
}
}
可以看出,将match語句下的模式比對内容由常量改成新變量,會直接将傳入的待比對對象傳遞給該新變量,但該新變量的作用域隻限于match語句内,在外無法調用;
2.4 比對數組與元組
數組:
在對數組進行模式比對時,可以配合通配符完成一些模糊比對的功能:
import scala.collection.mutable.ArrayBuffer
object main{
def main(args: Array[String]): Unit = {
val Demo = ArrayBuffer("Spark","Scala","Python")
Demo match {
case ArrayBuffer("Scala") => println("No!")
case ArrayBuffer("Spark",_*) => println("Yes!")
case _ => println("Warning!")
}
}
}
通過在比對内容中添加_*,來表示比對任意多的數組元素,這這裡表示比對第一個元素時"Spark",之後任意多其他元素的可變長數組;
元組:
在比對元組時,同樣可以使用對應的文法來實作模糊比對:
object main{
def main(args: Array[String]): Unit = {
def fitTuple(tuple:Tuple2[Any,Any]): Unit ={
tuple match {
case (1,"Spark") => println("1")
//比對第二個元素為Scala的長度為2的元組
case (x,"Scala") => println(x)
case _ => println("Nothing!")
}
}
val t = (3,"Scala")
fitTuple(t)
}
}
2.5 異常處理與模式比對
在前面的(資料科學學習手劄45)Scala基礎知識中提到過Scala中的錯誤處理機制,其實catch{}語句中的各條執行語句就是一條條的模式比對語句,這裡便不再贅述。
以上就是Scala中關于模式比對的一些基礎内容的簡單介紹,如有筆誤,望指出。