if let语法使您可以将if和let组合成一种不太冗长的方式来处理与一种模式匹配的值,而忽略其余模式。 例如:该程序与Option <u8>值匹配,但仅想在值为3时执行代码:
fn main() {
let some_u8_value = Some(0u8);
match some_u8_value {
Some(3) => println!("three"),
_ => (println!("啥也不是")),
}
}
我们想对Some(3)匹配做点什么,但对其他Some <u8>值或None值什么都不做。 为了满足match表达式,我们只需要处理一个变体就添加_ =>(),但是需要添加的许多样板代码。
相反,我们可以使用if let以更短的方式编写此代码并实现完全一致的匹配效果:
fn main() {
let some_u8_value = Some(8u8);
if let Some(3) = some_u8_value {
println!("three");
}
if let Some(8) = some_u8_value {
println!("匹配到了");
}
}
D:\learn\cargo_learn>cargo run
Compiling cargo_learn v0.1.0 (D:\learn\cargo_learn)
Finished dev [unoptimized + debuginfo] target(s) in 0.27s
Running `target\debug\cargo_learn.exe`
匹配到了
相应的如果我们想要得到一个确切的结果,比如如果没有匹配到我们需要的那个我们希望有返回结果,那么此时可以使用else
:
#[derive(Debug)]
enum UsState {
Alabama,
Alaska,
}
enum Coin {
Penny,
Quarter(UsState),
}
fn main() {
let coin = Coin::Penny;
let mut count = 0;
if let Coin::Quarter(state) = coin {
println!("State quarter from {:?}!", state);
} else {
count += 1;
println!("没有匹配到任何结果, count将自动+1 !!!")
}
}
D:\learn\cargo_learn>cargo run
Compiling cargo_learn v0.1.0 (D:\learn\cargo_learn)
warning: variable `count` is assigned to, but never used
--> src\main.rs:14:9
|
14 | let mut count = 0;
| ^^^^^^^^^
|
= note: `#[warn(unused_variables)]` on by default
= note: consider using `_count` instead
warning: value assigned to `count` is never read
--> src\main.rs:18:9
|
18 | count += 1;
| ^^^^^
|
= note: `#[warn(unused_assignments)]` on by default
= help: maybe it is overwritten before being read?
warning: variant is never constructed: `Alabama`
--> src\main.rs:3:5
|
3 | Alabama,
| ^^^^^^^
|
= note: `#[warn(dead_code)]` on by default
warning: variant is never constructed: `Alaska`
--> src\main.rs:4:5
|
4 | Alaska,
| ^^^^^^
warning: variant is never constructed: `Quarter`
--> src\main.rs:9:5
|
9 | Quarter(UsState),
| ^^^^^^^^^^^^^^^^
warning: 5 warnings emitted
Finished dev [unoptimized + debuginfo] target(s) in 0.51s
Running `target\debug\cargo_learn.exe`
没有匹配到任何结果, count将自动+1 !!!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。