You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中‘arms pattern’指什么?求简洁清晰的技术解释

Rust中Match表达式的「Arm」与「Pattern」详解

先把两个核心术语拆解开,结合代码例子一目了然:

1. 什么是Arm(分支)?

Arm就是match表达式里的每一个独立匹配单元,格式是模式 => 要执行的代码。你可以把整个match想象成一个分岔路口,每个Arm就是一条岔路——当输入值符合这条岔路的规则(模式),就走这条路执行代码。

比如下面这段代码里,match一共有5个Arm:

let number = 3;

match number {
    1 => println!("数字是1"),          // 第1个Arm
    2 => println!("数字是2"),          // 第2个Arm
    3 | 4 => println!("数字是3或4"),   // 第3个Arm
    5..=10 => println!("5到10之间"),   // 第4个Arm
    _ => println!("其他数字"),          // 第5个Arm
}

2. 什么是Pattern(模式)?

Pattern就是每个Arm箭头左边的部分,它是一套“匹配规则”,用来判断输入值是否符合当前Arm的条件。Rust的模式非常灵活,常见的类型有:

字面量模式

直接用具体的值匹配,比如上面例子里的1、2,只有当输入值等于这个字面量时才匹配。

或模式

用|表示“或”,比如3 | 4,输入值是3或者4都能匹配这个Arm。

范围模式

用..=表示闭区间范围,比如5..=10,输入值在5到10之间(包含两端)就会匹配。

通配模式_

用来匹配所有没被前面Arm覆盖的情况,相当于“其他所有情况”,必须放在最后一个Arm的位置,否则后面的Arm永远不会被执行。

解构模式(常用在枚举/结构体)

Rust的模式还能直接解构复杂类型,比如枚举变体里的关联值:

enum Message {
    Quit,
    Write(String),
    Move { x: i32, y: i32 },
}

let msg = Message::Move { x: 15, y: 30 };

match msg {
    Message::Quit => println!("退出"),
    Message::Write(text) => println!("收到文字:{}", text),  // 解构出字符串text
    Message::Move { x, y } => println!("移动到({},{})", x, y), // 解构出x和y
}

这里的Message::Write(text)和Message::Move { x, y }都是解构模式,它们不仅能匹配对应的枚举变体,还能把变体里的关联值提取出来用在代码里。

核心逻辑回顾

  • match表达式由多个Arm组成,每个Arm是「模式 + 执行代码」的组合
  • Rust会从上到下依次检查每个Arm的模式,找到第一个匹配的Arm后执行代码,不会再往下检查
  • Pattern是匹配的规则,从简单的字面量到复杂的解构,覆盖了各种匹配场景

内容的提问来源于stack exchange,提问作者Vitor de oliveira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 02:42:43