if let
https://doc.rust-lang.org/book/if-let.html
if let
という構文を使うと簡潔に書けることがある。
fn foo(x: i32) { println!("{}", x); } fn main() { let option: Option<i32> = Some(5); match option { Some(x) => { foo(x) }, None => {}, } if option.is_some() { let x = option.unwrap(); foo(x); } if let Some(x) = option { foo(x); } if let Some(x) = option { foo(x); } else { // bar(); } let mut v = vec![1, 3, 5, 7, 11]; loop { match v.pop() { Some(x) => println!("{}", x), None => break, } } let mut v = vec![1, 3, 5, 7, 11]; while let Some(x) = v.pop() { println!("{}", x); } }
$ cargo run Finished debug [unoptimized + debuginfo] target(s) in 0.0 secs Running `target/debug/4_21_if_let` 5 5 5 5 11 7 5 3 1 11 7 5 3 1