1

次の Dart コードがあるとします。

void main() {
  try {
    try {
      throw null;
    } catch(e) {
      throw null;
    } finally {
      print('first');
    }
  } finally {
    print('second');
  } 
}

http://try.dartlang.org経由でブラウザでこのコードを実行すると

非常に期待される結果を生み出しました。

first
second
Uncaught Throw of null.

しかし、このコードを Dart VM で実行すると、非常に予期しない結果になります。

second
Unhandled exception: Throw of null.

finallyこれは、最初の終了ブロック ( ) が実行されないように見えます。

この例外処理メカニズムの動作が理解できません。

もちろん、これはバグだと推測できます。しかし、例外処理はあらゆるシステムの基礎です。Dart 開発者はこの格差をどのように説明できますか?

PS

「プログラミングについて」というテーマに関連するこの質問は、ここで質問するのが適切な場所と時間だと思いますか?

4

1 に答える 1

3

私が知る限り、これは VM のエラーのようです。私はバグを提出しました:

https://code.google.com/p/dart/issues/detail?id=11758&thanks=11758&ts=1373396821

コードは VM と dart2js の実装の違いを示していますが、少しエラーが発生しやすいことを付け加えておきます。ブロックがスローされると思われる場合は、ブロック内のコードを独自の 内catchにラップします。catchtry-catch

そして、はい、これは StackOverflow で質問するのに適した質問であることに同意します。これを投稿してくれてありがとう。

于 2013-07-09T19:12:08.380 に答える