“ let”之后的方块未完成-尝试/使用

时间:2019-01-21 00:16:01

标签: f#

按照代码F#:

try
    let result = 100/0
with
    | :? Exception as ex -> printfn ex.Message

我得到一个错误:

  

'let'之后的块未完成。每个代码块都是   表达式,并且必须有结果。 'let'不能是最终代码   块中的元素。考虑给这个块一个明确的结果。

我在做什么错了?

2 个答案:

答案 0 :(得分:8)

问题在于let本身不是表达式:

在F#中,一切都是某种类型的表达式。但是,let本身并不是一个表达式,它是一个绑定,它必须以某些表达式继续,该表达式可能使用绑定到ID result的值。

由于您仅在测试try / catch功能。我假设您对产生任何值都不感兴趣,因此我在()之后添加了表达式let

try
    let result = 100/0
    ()
with
    ex -> printfn "%s" ex.Message

try/with表达式要求双方都返回相同类型的值,就像if/then/else一样。由于在with端,printfn返回了unit,因此我使try端也返回了一个unit的{​​{1}}值。可以认为它等效于C#中的()

答案 1 :(得分:2)

我可以推荐其他方法。这不会使B变量保持未定义状态。

result