if let
fn sleep_for(secs: f32) {
let dur = if let Ok(dur) = std::time::Duration::try_from_secs_f32(secs) {
dur
} else {
std::time::Duration::from_millis(500)
};
std::thread::sleep(dur);
println!("slept for {:?}", dur);
}
fn main() {
sleep_for(-10.0);
sleep_for(0.8);
}
if let有点类似Java语言中的三目表达式。就是if expressions ? a : b
if let 和 match其实差不多,如果判断的层级只有两级可以使用if let。并且if let相比于match实现更加简洁。
经常使用的地方是使用Option做判断。
while let
fn main() {
let mut name = String::from("Comprehensive Rust 🦀");
while let Some(c) = name.pop() {
println!("character: {c}");
}
// (There are more efficient ways to reverse a string!)
}