天天看點

Scala入門到精通——第十五節 Case Class與模式比對(二)

模式比對的類型

for控制結構中的模式比對

option類型模式比對

1 常量模式

2 變量模式

3 構造器模式

4 序列(sequence)模式

序列模式指的是像array、list這樣的序列集合進行模式比對

5 元組模式

6 類型模式

上述代碼如果不用模式比對的話,要實作相同的功能,可以通過下列代碼實作:

7 變量綁定模式

正規表達式中的模式比對:

在前面的課程内容中,我們曾經提到過option類型,option類型有兩個子類,分别是some和none(單例對象),本小節将從模式比對的角度對option類進行重新思考。

下面給出的是option類在scala語言中的類層次結構:

Scala入門到精通——第十五節 Case Class與模式比對(二)

option類其實是一個sealed class

下面給出的分别是some及none的源碼:

下面的代碼示範了其如何應用到模式比對中:

前面我們看到:none是一個case object,它同some一樣都extends option類,隻不過some是case class,對于case class我們已經很熟悉了,那case object它又是怎麼樣的呢?假設我們定義了以下類:

上述代碼編譯後,生成的位元組碼檔案如下:

單從編譯後生成的類來看,它們之間似乎實作方式都一樣,那到底是什麼樣的呢?

class a的反編譯後的代碼如下:

case class b對應的位元組碼檔案反編譯後如下:

case object caseobject對應的反編譯後的内容:

對比上述代碼不難看出,case object與case class所不同的是,case object對應反編譯後的caseobject$.cl

ass中不存在apply、unapply方法,這是因為none不需要建立對象及進行内容提取,從這個角度講,它被定義為case object是十分合理的。

添加公衆微信号,可以了解更多最新spark、scala相關技術資訊

Scala入門到精通——第十五節 Case Class與模式比對(二)

繼續閱讀