Scala中的模式匹配

本文作者:林偉兵,叩丁狼高級(jí)講師。原創(chuàng)文章殉了,轉(zhuǎn)載請(qǐng)注明出處。

在Java中我們可以通過(guò)switch..case語(yǔ)句來(lái)實(shí)現(xiàn)模式匹配拟枚,在scala中提供了match case實(shí)現(xiàn)模式匹配薪铜。

普通的模式匹配語(yǔ)句如下:

val arr = Array("spark","storm","flink","hadoop")
val name = arr(scala.util.Random.nextInt(arr.length))
val tipStr = name match {
case "spark" => "This is a spark book "
case "storm" => "This is a storm book "
case "flink" => "This is a flink book "
case "hadoop" => "This is a hadoop book "
case _ => "i don't know !"
}
println(tipStr)
除了滿足普通的匹配,還可以進(jìn)行Array匹配,如下代碼:

sayHi("",Array("Zhangsan"))
sayHi("lisi",Array("lisi"))

def sayHi(name:String, arr: Array[String]): Unit ={
arr match {
case Array("Zhangsan") => println("Hi , zhangsan...")
case Array(x,y) => println("Hi,"+x + ","+ y)
case Array("Zhangsan",_*) => println("Hi,Zhangsan and others...")
case _ if name == "lisi" => println("lisi jun")
case _ => println("Hi everyones")
}
}
將上面的匹配換成List,如下代碼:

sayHi(List("Zhangsan"))
sayHi(List("lisi","wangwu"))
sayHi(List("Zhangsan","lisi","wangwu"))
sayHi(List("wangwu"))

def sayHi(arr: List[String]): Unit ={
arr match {
case "Zhangsan" :: Nil => println("Hi , zhangsan...")
case x :: y :: Nil => println("Hi,"+x + ","+ y)
case "Zhangsan":: tail => println("Hi,Zhangsan and others...")
case _ => println("Hi everyones")
}
}
也可以對(duì)類型進(jìn)行匹配:

checkType(33)
checkType("Hello world")
checkType(15.9f)

def checkType(obj:Any): Unit ={
obj match {
case x:Int => println("pass type is Int")
case x:Double => println("pass type is Double")
case x:String => println("pass type is String")
case _ => println("pass type is Others...")
}
}
捕獲多種異常的處理:

try{
val arr = Array()
print("arr(11) :"+ arr(11))
}catch {
case e:ArrayIndexOutOfBoundsException => println("ArrayIndexOutOfBoundsException:"+e.getLocalizedMessage)
case e:Exception => println("Exception:"+e)
}
模式匹配還支持泛型操作:

class Person(name:String)
case class Teacher(name:String, grade:Int) extends Person(name)
case class Student(name:String, age:Int) extends Person(name)
case class OtherPerson(name:String) extends Person(name)

def doWork(person:Person): Unit ={
person match {
case Teacher(name, grade) => println(s"teacher name is teach in gradegrade")
case Student(name, age) => println(s"student name age isage")
case _ => println(s"other person is working...")
}
}

doWork(new Student("張三",22))
doWork(new Teacher("李四", 5))
doWork(new OtherPerson("李四"))
對(duì)于map取值來(lái)說(shuō)恩溅,Some和None模式匹配:

val map = Map("php" -> 85, "bigdata" -> 99)
val item = map.get("php")
item match {
case Some(x) => println("item 是"+ x)
case None => println("找不到....")
}

想獲取更多技術(shù)視頻隔箍,請(qǐng)前往叩丁狼官網(wǎng):http://www.wolfcode.cn/openClassWeb_listDetail.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市脚乡,隨后出現(xiàn)的幾起案子蜒滩,更是在濱河造成了極大的恐慌,老刑警劉巖奶稠,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俯艰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡锌订,警方通過(guò)查閱死者的電腦和手機(jī)竹握,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辆飘,“玉大人啦辐,你說(shuō)我怎么就攤上這事谓传。” “怎么了芹关?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵续挟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我侥衬,道長(zhǎng)诗祸,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任轴总,我火速辦了婚禮直颅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肘习。我一直安慰自己际乘,他們只是感情好坡倔,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布漂佩。 她就那樣靜靜地躺著,像睡著了一般罪塔。 火紅的嫁衣襯著肌膚如雪投蝉。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天征堪,我揣著相機(jī)與錄音瘩缆,去河邊找鬼。 笑死佃蚜,一個(gè)胖子當(dāng)著我的面吹牛庸娱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谐算,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼熟尉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了洲脂?” 一聲冷哼從身側(cè)響起斤儿,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎恐锦,沒(méi)想到半個(gè)月后往果,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡一铅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年陕贮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潘飘。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡飘蚯,死狀恐怖馍迄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情局骤,我是刑警寧澤攀圈,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站峦甩,受9級(jí)特大地震影響赘来,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凯傲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一犬辰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冰单,春花似錦幌缝、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至荒叼,卻和暖如春轿偎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背被廓。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工坏晦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嫁乘。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓昆婿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蜓斧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仓蛆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Scala與Java的關(guān)系 Scala與Java的關(guān)系是非常緊密的!法精! 因?yàn)镾cala是基于Java虛擬機(jī)多律,也就是...
    燈火gg閱讀 3,421評(píng)論 1 24
  • 在scala中,模式匹配的熟練使用可以給讓程序看起來(lái)更加的簡(jiǎn)潔易懂搂蜓,該特性有很多使用方法狼荞,下邊介紹一些不太常用的。...
    蠟筆小噺沒(méi)有煩惱閱讀 208評(píng)論 0 0
  • 簡(jiǎn)單匹配 模式匹配常用于match語(yǔ)句: 變量使用 模式匹配case中可以使用變量來(lái)獲取參數(shù)值 類型匹配 守衛(wèi)匹配...
    0過(guò)把火0閱讀 296評(píng)論 0 0
  • 一帮碰、常量相味、類型匹配 二、 數(shù)組列表和元組匹配 1. 數(shù)組 2. 元組 3. 列表
    _fatef閱讀 267評(píng)論 0 0
  • 最近在讀《自控力:和壓力做朋友》殉挽,這是作者繼《自控力》后的又一作品丰涉,2016年購(gòu)入拓巧,今年總算拆了封。還好不算太晚一死。...
    暗囈a閱讀 433評(píng)論 0 1