В F # мы можем удобно использовать failwith
и failwithf
, которые оба генерируют исключения.Следовательно, вам иногда может понадобиться использовать «когда охранник», чтобы различать различные условия исключения.
Вот иллюстративный пример:
try
let isWednesday = DateTime.Now.DayOfWeek = DayOfWeek.Wednesday
if isWednesday then failwith "Do not run this on Wednesdays!"
with
| :? DivideByZeroException -> printfn "You divided by zero."
| :? Exception as ex when ex.Message.Contains("Wednesdays") -> printfn "I said, %s" ex.Message
| ex -> printfn "%s" ex.Message
Однако приведенный выше код приводит к двумпредупреждения:
Program.fs(14,7): warning FS0067: This type test or downcast will always hold
Program.fs(14,7): warning FS0067: This type test or downcast will always hold
Как мне избежать этого предупреждения?