我被一個看似微不足道的問題困住了:如果函數以無點的方式寫入,我無法處理函數中的異常。在免費函數中的異常處理
考慮這兩個功能:
let divide1 x y =
try
x/y
with
| :? System.DivideByZeroException -> 42
let divide2 =
try
(/)
with
| :? System.DivideByZeroException -> fun _ _ -> 42
let x1 = divide1 5 0 // works fine
let x2 = divide2 5 0 // doesn't handle an exception
雖然這兩個功能都看似相同,他們有不同的類型:
val divide1: int -> int -> int
val divide2: (int -> int -> int)
顯然,divide2
甚至沒有試圖處理異常。它只是返回一個操作符。
我能做些什麼才能使divide2
以適當的方式處理異常(除非明確聲明其參數)?
嗯,這是預期的。你'嘗試'返回一個函數併成功。稍後調用此函數時會引發異常。我認爲F#社區是免費的? ;) –
@羅伯特:直到最後一句,我還是那麼喜歡你。 ;-( – ildjarn
@ildjarn:爲什麼?少點無點,當然,但我認爲我沒有看到過單點無點不會降低可讀性的問題。我們依賴於智能感知的額外減號並且param的名字都丟失了 –