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

量子物理学家

我在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用动态类型而不是不可能的通用属性

来自分类Dev

观看未使用的局部变量是不可能的吗?为什么?

来自分类Dev

为什么不可能对结论中使用的术语进行归纳?

来自分类Dev

为什么我的编译器在 C++ 中使用动态分配的内存时给我错误

来自分类Dev

为什么不可能在 Java 中使用 if 语句构建二进制信号量

来自分类Dev

为什么在实例化具有具体类型的对象时不可能对变量使用泛型类型?

来自分类Dev

python范围步长不可能使用枚举

来自分类Dev

在Windows 10中使用通配符搜索文件-不可能吗?

来自分类Dev

为什么在Function中使用结构和枚举时出现错误?

来自分类Dev

为什么在 C 中使用 round() 而不是 floor() 可能会导致错误/(程序错误)?

来自分类Dev

为什么在Scala中不可能将变量与`to`一起使用?

来自分类Dev

为什么在Kotlin中不可能使用对`suspend`函数的方法引用?

来自分类Dev

为什么ArrayIndexOutOfBoundsException不是编译时错误?

来自分类Dev

使用无符号而不是带符号的int更有可能导致错误吗?为什么?

来自分类Dev

openlayers:使用MVT VectorTileSource进行群集不可能吗?

来自分类Java

为什么要使用ClassCastException而不是编译错误?

来自分类Dev

为什么边界是错误的常见位置?

来自分类Dev

错误:使用gcc 4.8.2在命令行中编译时,“ to_string”不是“ std”的成员,可以在NetBeans中使用吗?

来自分类Java

为什么使用常量而不是枚举?

来自分类Dev

为什么直接使用泛型值是不可能的,但如果从 Dart 中的方法返回也是可能的

来自分类Dev

使用 Error.Is 函数比较动态错误消息

来自分类Dev

为什么不可能通过ddrescue压缩动态图像?

来自分类Dev

动态重定向输出-在Linux中看起来不可能,为什么?

来自分类Java

为什么javac的允许一些不可能的铸件,而不是别人?

来自分类Dev

使用逗号分隔的字段好不好

来自分类Dev

当在过滤器中使用枚举时,为什么在graphql中出现语法错误?

来自分类Dev

在C ++中使用<cstdio>而不是<stdio.h>时,为什么“ std :: printf”和“ printf”都进行编译?

来自分类Dev

Rust 枚举可以使用在其变体之一上实现的方法吗?

来自分类Dev

为什么在使用Rust 1.31时Rust编译器会违反借用规则?

Related 相关文章

  1. 1

    使用动态类型而不是不可能的通用属性

  2. 2

    观看未使用的局部变量是不可能的吗?为什么?

  3. 3

    为什么不可能对结论中使用的术语进行归纳?

  4. 4

    为什么我的编译器在 C++ 中使用动态分配的内存时给我错误

  5. 5

    为什么不可能在 Java 中使用 if 语句构建二进制信号量

  6. 6

    为什么在实例化具有具体类型的对象时不可能对变量使用泛型类型?

  7. 7

    python范围步长不可能使用枚举

  8. 8

    在Windows 10中使用通配符搜索文件-不可能吗?

  9. 9

    为什么在Function中使用结构和枚举时出现错误?

  10. 10

    为什么在 C 中使用 round() 而不是 floor() 可能会导致错误/(程序错误)?

  11. 11

    为什么在Scala中不可能将变量与`to`一起使用?

  12. 12

    为什么在Kotlin中不可能使用对`suspend`函数的方法引用?

  13. 13

    为什么ArrayIndexOutOfBoundsException不是编译时错误?

  14. 14

    使用无符号而不是带符号的int更有可能导致错误吗?为什么?

  15. 15

    openlayers:使用MVT VectorTileSource进行群集不可能吗?

  16. 16

    为什么要使用ClassCastException而不是编译错误?

  17. 17

    为什么边界是错误的常见位置?

  18. 18

    错误:使用gcc 4.8.2在命令行中编译时,“ to_string”不是“ std”的成员,可以在NetBeans中使用吗?

  19. 19

    为什么使用常量而不是枚举?

  20. 20

    为什么直接使用泛型值是不可能的,但如果从 Dart 中的方法返回也是可能的

  21. 21

    使用 Error.Is 函数比较动态错误消息

  22. 22

    为什么不可能通过ddrescue压缩动态图像?

  23. 23

    动态重定向输出-在Linux中看起来不可能,为什么?

  24. 24

    为什么javac的允许一些不可能的铸件,而不是别人?

  25. 25

    使用逗号分隔的字段好不好

  26. 26

    当在过滤器中使用枚举时,为什么在graphql中出现语法错误?

  27. 27

    在C ++中使用<cstdio>而不是<stdio.h>时,为什么“ std :: printf”和“ printf”都进行编译?

  28. 28

    Rust 枚举可以使用在其变体之一上实现的方法吗?

  29. 29

    为什么在使用Rust 1.31时Rust编译器会违反借用规则?

热门标签

归档