Scala 中的模式匹配类似于 Java 中的 switch 语法,但是比 Java 中的语法更加强大

语法说明:模式匹配代码块使用 match 关键字声明,每个分支使用 case 关键字声明
匹配规则:从开始到最后依次检查是否匹配 case 分支,成功就执行分支代码,否则继续;都匹配不上时执行兜底的分支代码

入门案例

  1. object MatchDemo {
  2. def main(args: Array[String]): Unit = {
  3. for (ch <- List('+', 3, "!", '-')) {
  4. charMatch(ch)
  5. }
  6. }
  7. def charMatch(ch: Any): Unit = {
  8. ch match {
  9. case '+' => println("这是个加号")
  10. // (1)变量赋值+条件守卫
  11. case character if character.isInstanceOf[Char] => println(s"the char variable is: $character")
  12. // (2)条件守卫
  13. case _ if ch.toString.equals("3") => println("数字3")
  14. // (3)兜底分支(必须放在最后)
  15. case _ => println("default~~~")
  16. }
  17. }
  18. }

📝 详细说明

  • 如果所有 case 都不匹配,那么会执行最后的“case _”分支,类似于 Java 中的 default 语句
  • 如果所有 case 都不匹配,也没有兜底的分支,那么最终会抛出 MatchError
  • 每个 case 分支代码不需要 break 语句,执行完分支代码会自动中断 case
  • “case _”中的下划线表示忽略传入的需要匹配的值

✍ 思考:为什么要把(3)放在 case 分支的最后?提示:调换(1)、(3)顺序运行看看

其他概念

  • 模式守卫:可以对匹配内容进行限制
  • 变量赋值:case 关键字后跟变量名,那么会把 match 关键字前的值赋给该变量