2017-02-21 88 views
2

我該如何幫助F#編譯器解釋重新拋出一個沒有返回值的異常?告訴F#重新返回沒有值

例如,考慮包裝的操作記錄異常:

let doDivision() = 
    try 
     2/0 
    with ex -> 
     log ex 
     reraise 

編譯器會報告這個錯誤reraise

這種表達預計有型int但這裏的類型爲unit -> 'a

+0

它不能有「沒有返回值」,因爲'try'和'with'分支會有不同的類型。它需要與'try'分支具有相同的返回類型,即'int'。這是編譯器告訴你的,「這個表達式應該有int_類型」。 –

+0

如果我理解正確,重新運行會返回''T',它將變成'int'以匹配'try'表達式。 –

+0

正是........ –

回答

7

「reraise」是一個函數。你需要傳遞單位。

let doDivision() = 
    try 
     2/0 
    with ex -> 
     log ex 
     reraise() 
+3

哦,傻了。 :-) –