'let'之后的块未完成 - 尝试/用

Mat*_*nda 1 f#

遵循代码F#:

try
    let result = 100/0
with
    | :? Exception as ex -> printfn ex.Message
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

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

我究竟做错了什么 ?

AMi*_*res 8

问题是,let它本身并不是一个表达方式:

在F#中,一切都是某种类型的表达.但是let单独不是一个表达式,是一个绑定,它必须继续使用一些表达式,大概是使用绑定到id的值result.

因为您只是在测试try/catch功能.我假设你并不真正对产生任何值感兴趣,这就是我添加表达式的原因:()之后let.

try
    let result = 100/0
    ()
with
    ex -> printfn "%s" ex.Message
Run Code Online (Sandbox Code Playgroud)

try/with表达式要求双方回到同一类型的值,就像if/then/else做.由于在with侧面printfn返回unit,我使try侧面也返回一个unit().把它想象成voidC#中的等价物.