Scala中的模式匹配类似于java中Switch的用法,但是更加强大

模式匹配语法中,采用match关键之声明,每个分支采用case关键字声明,当需要匹配时,会从第一个case分支开始,如果匹配成功,继续执行下一个分支进行判断。如果所有的case都不匹配,那么会执行 case_分支,类似于Java中的default语句

模式匹配注意事项和说明

  1. 如果所有case都不匹配,那么会执行case_分支,类似于Java中dbfault语句
  2. 如果所有case都不匹配,又没有写case_分支,那么会抛出MatchError
  3. 每个case中,不用break语句,自动中断case
  4. 可以在match中使用其它类型,而不仅仅是字符
  5. =>等价于java swtich的:
  6. =>后面的代码块到下一个case,是作为一个整体执行,可以使用扩起来,也可以不扩

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.sky.scala.exercise16.typematch

object TypeMatchDemo {
def main(args: Array[String]): Unit = {
val oper = "-"
val n1 = 100
val n2 = 200

oper match {
case "+" => {
println(n1 + n2)
}
case "-" => {

println(n1 - n2)
}
case "*" => {
println(n1 * n2)
}
case "/" => {
println(n1 / n2)
}
case _ => {
println("输入错误")
}
}
}
}

守卫

基本介绍

如果想要表达匹配某个范围的数据,就需要在模式匹配中增加条件守卫

如果case后面有条件守卫if,那么这时候的 _ 不是表示默认匹配 表示忽略传入的的值匹配符号值,使用守卫匹配

类型匹配注意事项

可以匹配对象的任意类型,这样做避免了使用 isInstanceOf和asInstanceOf方法

匹配数组

  1. Array(0)匹配只有一个元素且为0的数组
  2. Array(x,y)匹配数组有两个元素,并将两个元素赋值为x和y。当然可以依次类推Array(x,y,z)匹配数组有3个元素的等等…
  3. Array(0,_*)匹配数组以0开始

匹配列表

匹配元组