理论教育 Scala的模式匹配:更加强大的备选项功能

Scala的模式匹配:更加强大的备选项功能

时间:2023-06-14 理论教育 版权反馈
【摘要】:Scala 中没有Java 的switch 语句,但是它的模式匹配不仅具有类似用法,而且功能更加强大。一个模式匹配包含了一系列备选项,每个都开始于关键字case。构造器模式匹配指的是直接在case 语句后面接类构造器,匹配的内容放置在构造器参数中。

Scala的模式匹配:更加强大的备选项功能

Scala 中没有Java 的switch 语句,但是它的模式匹配不仅具有类似用法,而且功能更加强大。在实际开发中,比如Spark 的源码中大量的使用了模式匹配的方式来进行类型的判断,这种方式更加地简洁明了,而且代码的可维护性可扩展性也非常高。

一个模式匹配包含了一系列备选项,每个都开始于关键字case。每个备选项都包含了一个模式以及一个或多个表达式,=>隔开了模式和表达式。Scala 的模式匹配包括:常量模式、变量模式、构造器模式、序列模式、元组模式以及类型模式等。

一、常量模式匹配

常量模式匹配就是在模式匹配中匹配常量。

match 对应Java 里的switch,但是写在选择器表达式之后。match 表达式通过以代码的先后次序尝试匹配每个模式,只要发现有一个匹配的case,剩下的case 不会继续匹配。最后一条匹配中的_表示任意数据,类似于Java 的default 语句。

二、变量模式匹配

变量模式匹配是在模式中匹配scala 变量,如case x if(x > 0) => x 等,在使用时一般会加守卫条件。

可以将模式匹配的默认情况,_替换为一个变量名,此时模式匹配语法就会将要匹配的值赋值给这个变量,从而可以在后面的处理语句中使用要匹配的值。

三、构造器模式匹配

Scala 中提供了一种特殊的类,用case class(样例类)进行声明。case class 有点类似于Java 中的JavaBean 的概念,即只定义field,并且由Scala 编译时自动提供getter 和setter 方法,但是没有method。构造器模式匹配指的是直接在case 语句后面接类构造器,匹配的内容放置在构造器参数中。(www.daowen.com)

构造器模式匹配跟isInstanceOf 用法一样,主要判断是该类以及该类的子类对象即可,不是精准的判断。

四、序列模式匹配

序列模式用于匹配如数组、列表、Range 这样的线性结构集合。

上例的Array 匹配中first,second 表示匹配数组中的第一、二个元素,_*表示匹配剩余内容,其中first,second 的名字可以换成任意变量名;List 匹配中的_表示匹配列表的第一个元素,但不赋给任何变量,将匹配到的第二个元素赋值给second。

五、元组模式匹配

元组模式用于匹配scala 中的元组类型。

六、类型模式匹配

类型模式可以匹配输入待匹配变量的数据类型。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈