如何在Rust的Result::map中做模式匹配以避免变量重复声明
Rust 目前没有提供 Scala 那种匿名偏函数的语法糖,无法完全省略闭包参数声明,但可以通过以下两种常用方案减少冗余,符合 Rust 惯用写法:
方案1:简化闭包匹配写法
直接将闭包参数与match逻辑合并书写,参数仅出现一次,几乎没有冗余感:
some_result.map(|v| match v { 1 => HttpResponse::NoContent().finish(), _ => HttpResponse::NotFound().finish(), })
方案2:平层匹配整个Result(更推荐的Rust惯用法)
你补充的写法是社区非常推荐的处理方式,直接对整个Result做平层匹配,不需要嵌套闭包,还可以统一处理Err分支,逻辑更清晰:
Ok(match result { Ok(1) => HttpResponse::NoContent(), Ok(_) => HttpResponse::NotFound(), Err(_) => HttpResponse::InternalServerError() }.finish())
关于if else的说明
你提到的「if else不符合Rust惯用法」的说法并不绝对:简单二分支场景下使用if else完全合理,多分支场景用match可读性更高,两者没有绝对的优劣,按需选择即可。
内容的提问来源于stack exchange,提问作者Jarl André Hübnenthal
相关产品推荐
相关产品推荐

