mapcode
只对正确值作处理,而对 None不作任何处理
map_orio
对正确值作处理,而对 None使用默认值
let x = Some("foo"); assert_eq!(x.map_or(42, |v| v.len()), 3); let x: Option<&str> = None; assert_eq!(x.map_or(42, |v| v.len()), 42);
map_or_elsemap
对正确值作处理,而对 None计算出默认值
let k = 21; let x = Some("foo"); assert_eq!(x.map_or_else(|| 2 * k, |v| v.len()), 3); let x: Option<&str> = None; assert_eq!(x.map_or_else(|| 2 * k, |v| v.len()), 42);
and_then语言
相似于map(其余语言里有叫flat_map),不一样的是block里面的结果必须是个Option
let some_number = Some(9); let another_number = some_number .map(|n| n - 1) // => Some(8) .map(|n| n * n) // => Some(64) .and_then(|n| Some(n/4)); // => Some(16)