文章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"
但是,對我來說它編譯一貫的「捉[mscorlib程序] System.Object的」與到catch塊內部的過濾函數的調用,並沒有「過濾器「部分存在於生成的MSIL中。所以問題是,F#是否真的支持這個構造?
感謝
爲什麼這個實現方式的內部對您來說很重要? –
@JohnPalmer - 實現策略實際上影響了某些角落案例中的語義(由於.NET/Windows的兩遍模型),所以我認爲這是一個非常相關的問題。 – kvb
VB.NET和F#有相似的條件捕獲結構,但是,VB.NET編譯器會發出_filter_ blocks,而F#顯然不會。這使得語義在某些情況下很重要,正如@kvb所說的,特別是在互操作性的情況下 – actionresult