Scala基礎學習十之模式匹配了解

模式匹配

模式匹配是Scala中非常有特色,非常強大的一種功能。模式匹配,其實類似於Java中的swich case語法,即對一個值進行條件判斷,然後針對不同的條件,進行不同的處理。對於Spark來說,Scala的模式匹配功能也是極其重要的,在spark源碼中大量地使用了模式 匹配功能。因此為了更好地編寫Scala程序,並且更加通暢地看懂Spark的源碼,學好模式匹配都 是非常重要的

Scala是沒有Java中的switch case語法的,相對應的,Scala提供了更加強大的match case語法,即模式匹配,類替代switch case,match case也被稱為模式匹配。

match case的語法如下:變量 match { case 值 => 代碼 }。如果值為下劃線,則代表了不滿足 以上所有情況下的默認情況如何處理。此外,match case中,只要一個case分支滿足並處理了, 就不會繼續判斷下一個case分支了。(與Java不同,java的switch case需要用break阻止)。

Scala的match case與Java的switch case最大的不同點在於,Java的switch case僅能匹配變量 的值,比1、2、3等;而Scala的match case可以匹配各種情況,比如變量的類型、集合的元素、 有值或無值


對值進行匹配

Scala基礎學習十之模式匹配了解

如果是2的話呢?

Scala基礎學習十之模式匹配了解

這樣可以用下面的辦法解決

Scala基礎學習十之模式匹配了解

也可以用_(下劃線)

Scala基礎學習十之模式匹配了解

匹配的時候是從下往上匹配的,所以我們改動下代碼

Scala基礎學習十之模式匹配了解

對類型進行匹配

Scala基礎學習十之模式匹配了解

運行結果

Scala基礎學習十之模式匹配了解

對Array和List元素進行匹配

Scala基礎學習十之模式匹配了解

對case class進行匹配

Scala基礎學習十之模式匹配了解

Scala基礎學習十之模式匹配了解

對有值或沒值進行匹配(Option)

Scala基礎學習十之模式匹配了解

Scala基礎學習十之模式匹配了解

元組

Scala基礎學習十之模式匹配了解

scala泛型

基本和Java一樣,區別在於:Java使用<>表示泛型,scala使用[]表示泛型

泛型可以出現在class名稱後面以及方法名稱後面

class Student[T]

def add[T](t:T)

上下界:

[A1 >: A] : 表示A是A1的下界,也就是A是A1的子類

[A1 <: a="" :="">

協變/逆變:

[+T] : 協變,如果有一個類C定義為C[T],而且A是B的父類,那麼C[A]是C[B]的父類

Scala基礎學習十之模式匹配了解

[-T] : 逆變,如果有一個類C定義為C[T],而且A是B的父類,那麼C[B]是C[A]的父類

Scala基礎學習十之模式匹配了解

[T] : 正常定義,如果有一個類C定義為C[T],而且A是B的父類,那麼C[A]和C[B]之間沒有關係

Scala基礎學習十之模式匹配了解

隱式轉換

注意:隱式轉換函數只能轉換一次

隱式轉換函數

將一個對象通過定義的隱式轉換函數轉換成為另一個對象,主要在於某一個對象在調用某個方法的時候,

該對象實際上沒有該方法,可以通過隱式轉換將該對象轉換為具有該方法的其他對象(隱式轉換函數在當前作用域中存在)

Scala基礎學習十之模式匹配了解

"


分享到:


相關文章: