0Pricing
Scala for Backend Engineering & Functional Programming · 课时

match 表达式

根据形状进行分支

match 表达式 是 CoddyKit 上的免费 Scala for Backend Engineering & Functional Programming 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Scala for Backend Engineering & Functional Programming 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Scala for Backend Engineering & Functional Programming 课程共包含 4 节课。

什么是 match

match 是 Scala 强大的分支结构。您向它提供一个值和一系列 case 模式,它会执行第一个匹配的分支。

您可以把它理解为功能更强、基于表达式的 switch 语句。

基本语法

您可以写成 value match { case pattern => result }。每个 case 定义一个模式,以及匹配成功时要执行的代码。

由于 match 是一个表达式,整个结构会返回一个值。

object Main {
  def main(args: Array[String]): Unit = {
    val n = 2
    val word = n match {
      case 1 => "one"
      case 2 => "two"
      case 3 => "three"
    }
    println(word)
  }
}

通配符情况

下划线 _ 是一个可以匹配任何内容的通配符。请在末尾使用它作为兜底默认情况。

如果没有它,未匹配的值会在运行时抛出 MatchError。

object Main {
  def main(args: Array[String]): Unit = {
    val n = 9
    val word = n match {
      case 1 => "one"
      case 2 => "two"
      case _ => "many"
    }
    println(word)
  }
}

匹配字符串

模式不只适用于数字。您可以直接匹配字符串字面量。

object Main {
  def main(args: Array[String]): Unit = {
    val cmd = "start"
    val msg = cmd match {
      case "start" => "Starting up"
      case "stop"  => "Shutting down"
      case _       => "Unknown command"
    }
    println(msg)
  }
}

match 返回值

由于每个分支都会产生一个值,您可以将 match 的结果赋给 val,或在表达式中直接使用它。

这样可以让代码保持简洁,并避免使用可变变量。

object Main {
  def main(args: Array[String]): Unit = {
    val light = "red"
    println(s"Action: " + (light match {
      case "red"   => "stop"
      case "green" => "go"
      case _       => "caution"
    }))
  }
}

组合情况

您可以在一个 case 中使用 |(竖线)匹配多个值。列出的所有值都会进入同一个分支。

object Main {
  def main(args: Array[String]): Unit = {
    val day = "Sat"
    val kind = day match {
      case "Sat" | "Sun" => "weekend"
      case _             => "weekday"
    }
    println(kind)
  }
}

函数中的 match

一种常见写法是让整个函数体成为一个 match 表达式。匹配结果会成为返回值。

object Main {
  def describe(n: Int): String = n match {
    case 0 => "zero"
    case 1 => "one"
    case _ => "other"
  }
  def main(args: Array[String]): Unit = {
    println(describe(0))
    println(describe(5))
  }
}

绑定整个值

您可以在通配符情况中使用 case other => 将匹配到的值绑定到一个名称。然后,您就可以在该分支中使用 other。

object Main {
  def main(args: Array[String]): Unit = {
    val n = 42
    val result = n match {
      case 0     => "nothing"
      case other => s"got $other"
    }
    println(result)
  }
}

顺序很重要

系统会从上到下检查各个情况,first 个匹配项会获胜。请将更具体的模式放在通用模式之前。

如果过早放置通配符,它会遮蔽下面的情况。

object Main {
  def main(args: Array[String]): Unit = {
    val n = 1
    val msg = n match {
      case 1 => "specific one"
      case _ => "anything else"
    }
    println(msg)
  }
}

为什么使用 match?

模式匹配是 Scala 的核心功能,因为它:

  • 能够清晰地表达多路分支
  • 作为表达式返回一个值
  • 可以扩展到类型、数据结构和守卫条件
  • 编译器可以检查它是否覆盖完整

综合运用

下面是一个使用字面量、组合情况和默认情况的小型分类器。

object Main {
  def grade(score: Int): String = score match {
    case 10 | 9 => "excellent"
    case 8 | 7  => "good"
    case _      => "keep trying"
  }
  def main(args: Array[String]): Unit = {
    println(grade(9))
    println(grade(7))
    println(grade(3))
  }
}

快速检查

测试您对 match 表达式的理解。

回顾

您已经学习了 match 的基础知识:

  • 语法是 value match { case pattern => result }
  • _ 是用于兜底匹配的通配符
  • 使用 | 组合多个值
  • match 是会返回值的表达式
  • 情况会从上到下尝试;第一个匹配项获胜

常见问题解答

「match 表达式」课时是免费的吗?

是的 — 「match 表达式」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Scala for Backend Engineering & Functional Programming 课程的其余内容,请升级到 CoddyKit PRO。 Scala for Backend Engineering & Functional Programming 课程共包含 4 节课。

「match 表达式」这节课中我会学到什么?

根据形状进行分支 你通过在浏览器中直接运行的动手代码来练习 Scala for Backend Engineering & Functional Programming,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Scala for Backend Engineering & Functional Programming 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Scala for Backend Engineering & Functional Programming 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「match 表达式」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Scala for Backend Engineering & Functional Programming 课中编写并运行代码吗?

能。每节 Scala for Backend Engineering & Functional Programming 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. match 表达式
  2. 匹配类型与值
  3. 守卫与绑定
  4. 解构
← 返回 Scala for Backend Engineering & Functional Programming