模式匹配
模式匹配是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可以匹配各種情況,比如變量的類型、集合的元素、 有值或無值
對值進行匹配
如果是2的話呢?
這樣可以用下面的辦法解決
也可以用_(下劃線)
匹配的時候是從下往上匹配的,所以我們改動下代碼
對類型進行匹配
運行結果
對Array和List元素進行匹配
對case class進行匹配
對有值或沒值進行匹配(Option)
元組
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]的父類
[-T] : 逆變,如果有一個類C定義為C[T],而且A是B的父類,那麼C[B]是C[A]的父類
[T] : 正常定義,如果有一個類C定義為C[T],而且A是B的父類,那麼C[A]和C[B]之間沒有關係
隱式轉換
注意:隱式轉換函數只能轉換一次
隱式轉換函數
將一個對象通過定義的隱式轉換函數轉換成為另一個對象,主要在於某一個對象在調用某個方法的時候,
該對象實際上沒有該方法,可以通過隱式轉換將該對象轉換為具有該方法的其他對象(隱式轉換函數在當前作用域中存在)
閱讀更多 分享電腦學習 的文章