• Scala 高阶:Scala中的模式匹配


    一、概述

    Scala中的模式匹配(case)类似于Java中的switch...case,但是Scala的模式匹配功能更为强大。通过模式匹配,可以匹配更复杂的条件和数据结构,包括常量、类型、集合、元组等。而 Java 的 switch 语句只能用于匹配整型或枚举类型

    二、基本语法

    Java

    1. public static void main(String[] args) {
    2. String str = "a";
    3. String ret = "";
    4. switch (str) {
    5. case "a":
    6. ret = "A";
    7. break;
    8. case "b":
    9. ret = "B";
    10. break;
    11. default:
    12. ret = "else";
    13. break;
    14. }
    15. System.out.println("ret=>"+ret);
    16. }

    Scala

    1. value match {
    2. case caseVal1 => returnVal1
    3. case caseVal2 => returnVal2
    4. ...
    5. case _ => defaultVal
    6. }

    Scala与Java的区别: 

     1、表达能力

             Java 的 switch 语句只能用于匹配 整型 或 枚举类型 

             Scala 的 模式匹配(case)可以传入数组、元组、对象及样例类等类型,表达更为丰富

    2、返回值

            Scala 中的 case 语句可以返回值,而 Java 的 switch 语句不支持返回值。只能在 case 语句中通过赋值的方式实现返回值

    3、穿透

            在 Java 中,switch 语句的 case 分支默认是穿透执行,即当满足某个分支条件时,会顺序执行后续所有分支,除非在分支中使用 break 关键字显式跳出。

            而在 Scala 中,模式匹配的 case 分支默认是不会穿透执行的,只会匹配第一个满足条件的分支,并执行对应的代码块。

    4、列表匹配

            Scala 的模式匹配可以直接匹配列表(List)和其他集合类型,使得匹配更加方便灵活。而Java无法做到这一点。

    1. def matchExample(x: Any): String = x match {
    2. case 1 => "One" // 匹配常量 1
    3. case "two" => "Two" // 匹配字符串 "two"
    4. case true => "True" // 匹配布尔值 true
    5. case (a, b) => s"Tuple with values: $a and $b" // 匹配二元组
    6. case list: List[Int] if list.nonEmpty => "Non-empty list of integers" // 匹配非空整数列表
    7. case _ => "Other" // 默认情况
    8. }
    9. println(matchExample(1)) // 输出:One
    10. println(matchExample("two")) // 输出:Two
    11. println(matchExample(true)) // 输出:True
    12. println(matchExample((10, 20))) // 输出:Tuple with values: 10 and 20
    13. println(matchExample(List(1, 2, 3))) // 输出:Non-empty list of integers
    14. println(matchExample("other value")) // 输出:Other

    三、模式守卫

            模式守卫(Pattern Guard)是 Scala 中模式匹配(Pattern Matching)的一个扩展特性。它允许在模式匹配的分支中添加更复杂的条件判断,以进一步过滤匹配的结果。

            在模式守卫中,我们可以在 case 分支后面使用 if 关键字,并跟随布尔表达式来指定额外的条件。只有当被匹配的值满足该布尔表达式时,才会执行相应的代码块。

  • 相关阅读:
    GAT-图注意力模型
    2022.8.11 模拟赛
    洛谷P5309 Ynoi 2011 初始化 题解
    十大排序算法的实现(C/C++)
    【IPC】 共享内存
    Sqoop实操案例-互联网招聘数据迁移
    新特性解读 | MySQL 8.0 对 limit 的优化
    【华为OD机试】选修课【2023 B卷|100分】
    源来Intel——开放原子全球峰会
    手机浏览器上网谁最快?手机浏览器速度测评
  • 原文地址:https://blog.csdn.net/d905133872/article/details/132965460