問題タブ [computation-expression]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1573 参照

f# - キャッチコンテキストから例外を再スローするときにスタックトレースを保持する方法は?

TL;DR: 元の例外のスタックトレースを保持しながら、以前にキャッチされた例外を後で発生させる方法。

Resultこれはモナドや計算式で便利だと思うので、特に。そのパターンは、例外をスローせずにラップするためによく使用されるため、その例を次に示します。

そして今それを使用しましょう:

問題は、スタックトレースに例外のソース(ここではcalc関数) が含まれないことです。書かれているとおりにコードを実行すると、次のようにスローされ、エラーの原因に関する情報は得られません。

使用reraise()は機能しません。キャッチコンテキストが必要です。明らかに、次の種類の a は機能しますが、ネストされた例外のためにデバッグが難しくなり、このラップ-リレイズ-ラップ-リレイズ パターンがディープ スタックで複数回呼び出されると、かなり醜くなる可能性があります。

更新: TeaDrivenDev は、コメントで使用することを提案しましたExceptionDispatchInfo.Capture(ex).Throw()。これは機能しますが、例外を別のものでラップする必要があり、モデルが複雑になります。ただし、スタックトレースは保持され、かなり実行可能なソリューションにすることができます。

0 投票する
3 に答える
82 参照

.net - 単一ケース判別共用体を使用した計算式の作成

開始数を 2 回除算しようとする関数があるとします。ワークフロー全体がブール値を返す必要があります。

次のビルダーは正しいですか?