Rust中处理Result匹配绑定代码重复的惯用方法(含binary_search_by_key场景)
问题背景
闭包foo接收一个字符并将其插入已排序向量,foo通过binary_search_by_key确定正确的插入索引。请问以下代码的更惯用写法是什么?
match myvec.binary_search_by_key(&<--snip-->) { Ok(idx) => idx, Err(idx) => idx, }
惯用写法
你可以利用Rust的模式合并特性,把两个分支合并成一个,写法更简洁直观:
match myvec.binary_search_by_key(&<--snip-->) { Ok(idx) | Err(idx) => idx, }
另外也可以借助Result的unwrap_or_else方法实现等价逻辑,但在这个场景下,模式合并的可读性会更优:
myvec.binary_search_by_key(&<--snip-->).unwrap_or_else(|idx| idx)
两种写法的行为完全一致——无论binary_search_by_key是找到元素返回Ok(idx),还是未找到元素返回Err(idx),最终都会返回对应的索引值。
内容的提问来源于stack exchange,提问作者kesarling
相关产品推荐
相关产品推荐

