我遇到了一个看似微不足道的问题:如果函数中的异常是以无点方式编写的,我将无法处理它。
考虑这两个函数:
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
适当的方式处理异常(除非专门声明其参数)?