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 反馈 — 无需本地设置。