Rust模式匹配详解

Rust模式匹配详解

模式在Rust中主要有两个用途

  • 实现数据的模式匹配和解构,先看看这个数据长什么样子(是否符合某个结构),如果符合,就把它“拆开”,把里面的各个部分拿出来单独使用
  • 程序流程控制,match、while、if等都可以根据模式是否与值匹配来决定程序的执行路径。
    模式匹配可以用于标量值,也可以用于符合数据类型(结构体、枚举、数组等)

模式由一系列规则和符号构成,由于描述一个值的结构。模式匹配可用于变量绑定、表达式、函数参数、返回值等场合。

let语句

let通过模式匹配机制将一个值绑定到新变量上,如果模式就是单个变量名的形式,那么它就属于不可反驳模式,即不存在匹配失败的情况。

fn main() {
   
   
    let a = 3;
    let b = (1,3);
    println!("{a}");
    println!("{b:?}")
}

以下是更复杂的例子

匹配元组

fn main() {
   
   
    let (a,b) = (1,2);
    println!("{a} {b}");
}

匹配数组

fn main() {
   
   
    let list = [1, 2, 3, 4];
    let [a, b, c, d] = list;
    println!("{} {} {} {}", a, b, c, d);
}

对现有变量进行模式匹配

fn main() {
   
   
    let mut a = 0;
    let mut b = 0;
    (a, b) = (1, 2);
    println!("{} {}", a, b)
}

通配符

下划线(_)用于忽略某个对应的值

fn main() {
   
   
    let list = [1, 2, 3, 4];
    let [a, _, _, d] = list;
    println!("{a} {d}")
}

双点号(..)用来忽略一部分连续值

fn main() {
   
   
    let list = [1, 2, 3, 4];
    let [a, .., d] = list;
    println!("{a} {d}")
}

复杂模式

可以使用更复杂的模式来对复合数据类型的值进行完全解构。

fn main() {
   
   
    let data = ((1, 2), (3, 4));
    let (a, b) = data;
    println!("{:?} {:?}", a, b)
}

我们还可以进一步对元组进行解构

fn main() {
   
   
    let data = ((1, 2), (3, 4));
    let ((a,b), (c,d)) = data;
    println!("{} {} {} {}", a, b, c, d);
}

使用模式移除引用语义

fn 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值