gpt4 book ai didi

error-handling - 是否有任何约定可以将多个错误汇总为另一个错误的原因?

转载 作者:行者123 更新时间:2023-11-29 08:02:12 25 4
gpt4 key购买 nike

我正在编写一个函数,该函数遍历 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))
}

我当前方法的问题是我只能将一个错误设置为 MyErrorTypecause,而我的错误的description 需要是一个静态的 String 所以我不能包含每个触发失败的描述。所有失败都可能与调用者相关。

最佳答案

据我所知没有约定,事实上我从来没有遇到过一次报告多个错误的问题......

...话虽这么说,但有两点可能对您有所帮助:

  1. 不限制描述为 'static String ,你可能会混淆 &'static str&str .在 fn description(&self) -> &str , str 的生命周期链接到 self 的生命周期(生命周期省略),因此嵌入了 String满足约束

  2. Error是统一处理错误的接口(interface)。在这种情况下,确实只有一个 cause被预见到,但是它并不排除更具体的类型来聚合多个原因并且因为Error允许向下转换(Error::isError::downcast、...)处理程序可以检索更具体的类型并进行完整查询

因此,我建议您创建一个新的具体类型,专门用于保存多个错误(在 Vec<Box<Error>> 中),并实现 Error界面。由您决定描述并导致它暴露。

与拥有未知(并且可能随着时间推移可能增加)数量的潜在向下转型目标相比,单一类型将使您的客户更容易测试向下转型。

关于error-handling - 是否有任何约定可以将多个错误汇总为另一个错误的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34489200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com