Scala 中的模式匹配类似于 Java 中的 switch 语法,但是比 Java 中的语法更加强大
语法说明:模式匹配代码块使用 match 关键字声明,每个分支使用 case 关键字声明
匹配规则:从开始到最后依次检查是否匹配 case 分支,成功就执行分支代码,否则继续;都匹配不上时执行兜底的分支代码
入门案例
object MatchDemo {
def main(args: Array[String]): Unit = {
for (ch <- List('+', 3, "!", '-')) {
charMatch(ch)
}
}
def charMatch(ch: Any): Unit = {
ch match {
case '+' => println("这是个加号")
// (1)变量赋值+条件守卫
case character if character.isInstanceOf[Char] => println(s"the char variable is: $character")
// (2)条件守卫
case _ if ch.toString.equals("3") => println("数字3")
// (3)兜底分支(必须放在最后)
case _ => println("default~~~")
}
}
}
📝 详细说明
- 如果所有 case 都不匹配,那么会执行最后的“case _”分支,类似于 Java 中的 default 语句
- 如果所有 case 都不匹配,也没有兜底的分支,那么最终会抛出 MatchError
- 每个 case 分支代码不需要 break 语句,执行完分支代码会自动中断 case
- “case _”中的下划线表示忽略传入的需要匹配的值
✍ 思考:为什么要把(3)放在 case 分支的最后?提示:调换(1)、(3)顺序运行看看
其他概念
- 模式守卫:可以对匹配内容进行限制
- 变量赋值:case 关键字后跟变量名,那么会把 match 关键字前的值赋给该变量