模式在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
Rust模式匹配详解

最低0.47元/天 解锁文章
1479

被折叠的 条评论
为什么被折叠?



