当我学习控制流时,我有点困惑。if-let我不明白和之间的区别match。
fn main() {
let some_u8_value = Some(8u8);
// println!(" {} ", some_u8_value);
if let Some(value) = some_u8_value {
println!(" {} ", value);
} else {
println!("not a num");
}
match some_u8_value {
Some(value) => println!(" {} ", value),
None => println!("not a num"),
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我们需要if-let?
Mas*_*inn 26
为什么我们需要 if-let?
我们不需要它,它是一个方便的功能。根据介绍它的RFC 160 :
[
if let] 允许可反驳的模式匹配,而无需完全匹配的语法和语义开销,也没有相应的额外的向右漂移。
和
今天测试和解包选项的惯用解决方案看起来像
Run Code Online (Sandbox Code Playgroud)match optVal { Some(x) => { doSomethingWith(x); } None => {} }这是不必要的冗长,需要
None => {}(或_ => {}) 情况,并引入不必要的向右漂移(这引入了两级缩进,而正常条件会引入一级缩进)。
if[使用简单的and 的is_some问题说明unwrap]if let 结构解决了所有这些问题,如下所示:
Run Code Online (Sandbox Code Playgroud)if let Some(x) = optVal { doSomethingWith(x); }