【问题标题】:Why does Dart allow arbitrary types to be thrown as exceptions?为什么 Dart 允许将任意类型作为异常抛出?
【发布时间】:2020-01-19 09:44:43
【问题描述】:

https://dart.dev/guides/language/language-tour#exceptions 的 Dart 文档中,声明如下:

Dart 提供了异常和错误类型,以及许多预定义的子类型。当然,您可以定义自己的例外。但是,Dart 程序可以将任何非空对象(不仅仅是 Exception 和 Error 对象)作为异常抛出。

他们为这种行为举的例子是throw 'Out of llamas!';

我为什么要抛出不是ErrorException 的东西?允许这样做的设计决策是什么?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    我认为这是因为您可能已经有一个对象要检查是否发生错误,并且可以直接抛出该对象,或者您可以像示例中那样抛出一个字符串。

    值得注意的是,catch 块可以选择性地捕获堆栈跟踪,并且由于堆栈跟踪不是异常的一部分,因此允许抛出任意对象是有意义的。

    try {
      throw 'Error!';
    } catch (error, stacktrace) {
      print(stacktrace);
    }
    

    很多时候你只会在代码中看到catch (e),但你也可能会看到catch (e, s)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多