Mic*_*ael 2 error-handling rust
我正在编写一个迭代向量的函数,Result
如果它们都成功则返回成功,如果失败则返回错误.限制error::Error
使我感到沮丧,我不知道如何解决它们.目前我有类似的东西:
let mut errors = Vec::new();
for result in results {
match result {
Err(err) => errors.push(err),
Ok(success) => { ... }
}
}
if errors.is_empty() {
return Ok(())
else {
return Err(MyErrorType(errors))
}
Run Code Online (Sandbox Code Playgroud)
我目前的做法的问题是,我只能设定一个错误是cause
的MyErrorType
,我的错误的description
需求,是一个静态的String
,所以我不能包括每个触发故障的说明.所有失败都可能与调用者有关.
没有我所知道的惯例,事实上我从未遇到过尝试一次报告多个错误的问题......
......话虽如此,有两点可以帮到你:
描述没有限制'static
String
,您可能会感到困惑&'static str
和&str
.在fn description(&self) -> &str
,str
寿命与self
(生命周期省略)的寿命相关联,因此嵌入式String
满足约束条件
Error
是一个统一处理错误的接口.在这种情况下,事实上,只有一个单一的cause
预见,但它不排除更具体的类型来聚合多种原因,自Error
允许向下转换(Error::is
,Error::downcast
,...)的更具体的类型可以通过处理器进行检索和查询全
因此,我建议您创建一个新的具体类型,专门用于保存多个错误(在a中Vec<Box<Error>>
),并实现Error
接口.由您来决定描述并导致它暴露.
单一类型将使您的客户更容易进行预测,而不是具有未知(并且可能随着时间的推移而增加)潜在向下目标的数量.
归档时间: |
|
查看次数: |
192 次 |
最近记录: |