我不明白我们使用if let
和通常if
的原因。 在 Rust 书籍 6.3 章中,示例代码如下:
let some_u8_value = Some(0u8);
if let Some(3) = some_u8_value {
println!("three");
}
上面的代码与:
let some_u8_value = Some(0u8);
if Some(3) == some_u8_value {
println!("three");
}
关于我们为什么要使用if let
或它专门用于什么的任何其他原因吗?
另一个原因是如果您希望使用模式绑定。例如,考虑一个枚举:
enum Choices {
A,
B,
C(i32),
}
如果你想为Choices
的C
变体实现特定的逻辑,你可以使用 if-let 表达式:
let choices: Choices = ...;
if let Choices::C(value) = choices {
println!("{}", value * 2);
}
if let 表达式在
语义上类似于 if 表达式,但 代替条件表达式,它期望关键字 let 跟随 通过模式、= 和仔细表达式。如果值 审查匹配模式,相应的块将执行。 否则,流将继续到以下 else 块(如果存在(。 与 if 表达式一样,如果 let 表达式的值由 已评估的块。
源
if let
可用于匹配任何枚举值:
enum Foo {
Bar,
Baz,
Qux(u32)
}
fn main() {
// Create example variables
let a = Foo::Bar;
let b = Foo::Baz;
let c = Foo::Qux(100);
// Variable a matches Foo::Bar
if let Foo::Bar = a {
println!("a is foobar");
}
// Variable b does not match Foo::Bar
// So this will print nothing
if let Foo::Bar = b {
println!("b is foobar");
}
// Variable c matches Foo::Qux which has a value
// Similar to Some() in the previous example
if let Foo::Qux(value) = c {
println!("c is {}", value);
}
// Binding also works with `if let`
if let Foo::Qux(value @ 100) = c {
println!("c is one hundred");
}
}