天天看点

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与模式匹配(二)

继续阅读