更改

添加716字节 、 2021年8月3日 (二) 20:18
无编辑摘要
第11行: 第11行:  
// 或者
 
// 或者
 
*hmap.entry("key").or_insert(42) += 10;
 
*hmap.entry("key").or_insert(42) += 10;
 +
</syntaxhighlight>
 +
 +
== 代码片段 ==
 +
 +
=== 将某些不满足要求的 <code>Ok</code> 转化为 <code>Err</code> ===
 +
 +
<syntaxhighlight lang=rust>
 +
/// Turns into an `Err(anyhow::Error)` some `Ok`s that meet the predicate
 +
trait AdjustResult<T, E> {
 +
    fn adjust(self, predicate: impl Fn(&T) -> bool, msg: &str) -> Result<T>
 +
    where
 +
        E: Into<anyhow::Error>;
 +
}
 +
 +
impl<T, E> AdjustResult<T, E> for Result<T, E> {
 +
    fn adjust(self, predicate: impl Fn(&T) -> bool, msg: &str) -> Result<T>
 +
    where
 +
        E: Into<anyhow::Error>,
 +
    {
 +
        match self {
 +
            Ok(o) if predicate(&o) => Err(anyhow!(msg.to_string())),
 +
            Ok(o) => Ok(o),
 +
            Err(e) => Err(e.into()),
 +
        }
 +
    }
 +
}
 
</syntaxhighlight>
 
</syntaxhighlight>