map
只对正确值做处理,而对 None不做任何处理
map_or
对正确值做处理,而对 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_else
对正确值做处理,而对 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)