我不明白我们使用的原因if let,只是通常的if. 在 Rust 书的第 6.3 章中,示例代码如下:
let some_u8_value = Some(0u8);
if let Some(3) = some_u8_value {
println!("three");
}
Run Code Online (Sandbox Code Playgroud)
上面的代码与:
let some_u8_value = Some(0u8);
if Some(3) == some_u8_value {
println!("three");
}
Run Code Online (Sandbox Code Playgroud)
关于我们为什么要使用if let它或它专门用于什么的任何其他原因?
另一个原因是您是否希望使用模式绑定。例如考虑一个枚举:
enum Choices {
A,
B,
C(i32),
}
Run Code Online (Sandbox Code Playgroud)
如果您希望为 的C变体实现特定逻辑Choices,您可以使用 if-let 表达式:
let choices: Choices = ...;
if let Choices::C(value) = choices {
println!("{}", value * 2);
}
Run Code Online (Sandbox Code Playgroud)
if let 表达式在语义上与 if 表达式类似,但它需要关键字 let 后跟一个模式、一个 = 和一个 scrutinee 表达式来代替条件表达式。如果检查者的值与模式匹配,则相应的块将被执行。否则,流程将继续执行以下 else 块(如果存在)。与 if 表达式一样,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");
}
}
Run Code Online (Sandbox Code Playgroud)