在try语句中清空/ finally块

时间:2018-03-15 12:33:27

标签: f#

我想要try一些东西:

try
    0/0

我不在乎它是否失败,提出Exception。但是将withfinally块留空会使文件无法解析。

这很有效,但写作并不好玩。

finally
    null |> ignore

如何将with / finally块(as)留空(尽可能)?

1 个答案:

答案 0 :(得分:3)

每个表达式都必须有结果,try ... with也不例外。评估try部分并获得结果。但如果try部分失败,则替换with部分的结果。

如果您的try部分为0/0,则其结果类型为int。因此,为了匹配类型,with部分的结果也应为int。想想当try部分失败时整个表达式的结果应该是什么,并将其粘贴在那里:

let foo = 
    try 0/0
    with _ -> 42

由于您说null |> ignore有效,我必须断定您的try部分实际上不是0/0ignore函数返回()(类型为unit的值),因此,如果with部分适合您,那么您的try部分必须是也返回unit。如果是这种情况,您可以使用()作为with部分而不是null |> ignore

let foo =
    try printfn "Let's pretend that printfn may fail"
    with _ -> ()

作为参考,这是(大致)ignore的定义方式:

let ignore x = ()