記事http://blogs.msdn.com/b/dotnet/archive/2009/08/25/the-good-and-the-bad-of-exception-filters.aspxは、F#が(たとえばC#で構文を持たない)例外フィルタをネイティブにサポートしていることを示しています。例外フィルタはの前にの適切なcatchブロックを実行し、trueを返すとcatchブロックが実行されます。私はF#が、これは F#例外フィルタ
このようなwith
| ex when filter(ex) -> printfn "Caught"
何かを使用すると、しかし、私にとってそれはcatchブロック内のフィルタ関数の呼び出しなし「フィルタと「[mscorlib] System.Objectのをキャッチする」通常にコンパイルん想像します"セクションが生成されたMSILに存在します。だから問題は、F#は本当にこの構造をサポートしているのでしょうか?
おかげ
これはなぜ実装されているの内部はあなたにとって重要ですか? –
@ JohnPalmer - 実装戦略は実際にはいくつかのコーナーケース(.NET/Windowsの2パスモデルのため)でセマンティクスに影響を与えます。 – kvb
VB.NETとF#は同様の条件付きキャッチ構造を持っていますが、VB.NETコンパイラは_filter_ブロックを生成し、F#は明らかにそうではありません。これは、@kvbがそれを置いたように、セマンティクスを問題にします。 – actionresult