fn main() {
let n = Some(5);
// map — transform the inner value, leave None alone
println!("{:?}", n.map(|x| x * 2)); // Some(10)
println!("{:?}", None::<i32>.map(|x| x * 2)); // None
// and_then — flatMap; lets the closure return another Option
let parsed: Option<i32> = "42".parse().ok();
let plus_one = parsed.and_then(|n| n.checked_add(1));
println!("{:?}", plus_one); // Some(43)
// unwrap_or / unwrap_or_else — supply a fallback
let v: Option<i32> = None;
println!("{}", v.unwrap_or(0)); // 0
println!("{}", v.unwrap_or_else(|| expensive())); // 99 (only called if None)
// filter — keep Some only if predicate holds
println!("{:?}", Some(7).filter(|&x| x > 10)); // None
}
fn expensive() -> i32 { 99 }
Create a free account and build your private vault. Share publicly whenever you want.