在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))
}


以上是在Rust中为Option&lt;number&gt;做max的惯用方法的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>