gpt4 book ai didi

dynamic - 为什么在 Rust 中使用动态错误而不是枚举很常见?使用编译时变体不好/不可能吗?

转载 作者:行者123 更新时间:2023-11-29 07:58:27 25 4
gpt4 key购买 nike

我在 Rust 中看到这种趋势,Result 中的错误会像这样返回:

fn do_something() -> Result<SomeType, Box<dyn std::error::Error>> {
// ...
}

为什么错误是动态的?来自 C++ 背景并且更喜欢 std::variant 而不是经典多态性(我对 rust 比较陌生),我对动态分配过敏,所以我只在真正需要的时候使用它们.我还发现 Rust 的枚举在其中包含变体非常棒。有人可以解释为什么将错误用作枚举不是标准/首选/常见的吗?

最佳答案

在应用程序代码中,这样做通常是为了方便。让所有错误类型静态已知可能是维护的噩梦:您有一个不断扩展的可能错误类型的枚举,其中大多数您永远不会尝试单独处理。这些错误类型有一种方法可以在远离错误实际发生位置的地方污染类型签名。 Box<dyn std::error::Error>保持事情非常干净,额外的分配通常不是问题,因为它只发生在错误情况下。

它在库包中很少见,但一些非常通用的代码不可能知道所有可能的错误类型。在组合多个结果类型时,处理错误的类型参数会变得非常笨拙。可能的静态已知错误组合的复杂结构可以方便地折叠成单一类型,Box<dyn std::error::Error> .

关于dynamic - 为什么在 Rust 中使用动态错误而不是枚举很常见?使用编译时变体不好/不可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58117685/

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