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 关键字前的值赋给该变量
