如何在 Result::map 中实现最佳模式匹配

1 rust

我知道我可以在 rust 中进行这样的模式匹配

some_result.map(|some_number| {
    match some_number {
        1 => HttpResponse::NoContent().finish(),
        _ => HttpResponse::NotFound().finish(),
    }
})
Run Code Online (Sandbox Code Playgroud)

但在 Scala 中我可以这样做

some_option.map {
    case 1 => ???
    case _ => ???
}
Run Code Online (Sandbox Code Playgroud)

有没有办法避免some_number上面rust代码中变量的重复?

编辑:

我发现我可以这样做,但我仍然认为最初的问题最好地回答了我的问题。

    Ok(match result {
        Ok(1) => HttpResponse::NoContent(),
        Ok(_) => HttpResponse::NotFound(),
        Err(_) => HttpResponse::InternalServerError()
    }.finish())
Run Code Online (Sandbox Code Playgroud)

一切都与上下文有关,在这种情况下,我没有包含太多内容......

编辑#2:

换了另一个答案。我真的很喜欢颠倒问题。如果否则不是惯用的 rust afaik。

kmd*_*eko 5

如果我们只是自行车棚风格,您可以some_number通过匹配整个结果来避免完全引入:

match some_result {
    Ok(1) => Ok(HttpResponse::NoContent().finish()),
    Ok(_) => Ok(HttpResponse::NotFound().finish()),
    Err(e) => Err(e)
};
Run Code Online (Sandbox Code Playgroud)

但这只是交换some_number一些Oks 和Errs。我通常更喜欢原始风格,但情人眼里出西施。