我在Rust中看到这种趋势,错误Result
返回如下:
fn do_something() -> Result<SomeType, Box<dyn std::error::Error>> {
// ...
}
为什么错误是动态的?我来自C ++,并且std::variant
喜欢古典多态性(我对锈较不熟悉),因此对动态分配过敏,因此仅在确实需要时才使用它们。我还发现Rust的枚举很棒,其中包含了变体。有人可以解释为什么将错误用作枚举不是标准/首选/常见的吗?
在应用程序代码中,通常是为了方便起见。使所有错误类型都静态已知可能是维护方面的噩梦:您拥有一个不断扩大的可能错误类型枚举,您绝不会尝试单独处理大多数错误类型。这些错误类型具有一种污染类型签名的方式,可以远离实际发生错误的地方。Box<dyn std::error::Error>
保持环境整洁,额外分配通常不是问题,因为它仅在错误情况下发生。
在库箱中很少见,但是一些非常通用的代码可能无法知道所有可能的错误类型。当组合多个结果类型时,处理类型参数是否有错误会变得很笨拙。可能存在的静态已知错误组合的复杂结构可以方便地分解为单个类型Box<dyn std::error::Error>
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句