在Rust中为Option<number>做max的惯用方法
我有一个号码Option。我需要用它的最大值和其他一些值来替换它,或者如果我的号码是None.
我写了一个函数来这样做:
fn max(a: Option<u32>, b: u32) -> Option<u32> {
if a.is_some() {
Some(std::cmp::max(a.unwrap(), b))
} else {
Some(b)
}
}
但我不能停止认为有一种更好、更简洁的方法可以使用Option. 你能帮助我吗?
回答
使用map:
fn max(a: Option<u32>, b: u32) -> Option<u32> {
a.map(|v| std::cmp::max(v, b))
}
操场
或者map_or默认未包装的术语:
fn max(a: Option<u32>, b: u32) -> Option<u32> {
a.map_or(Some(b), |v| Some(std::cmp::max(v, b)))
}
操场
对于您实际上不需要返回的Option:
fn max(a: Option<u32>, b: u32) -> u32 {
a.map_or(b, |v| std::cmp::max(v, b))
}