按照代码F#:
try
let result = 100/0
with
| :? Exception as ex -> printfn ex.Message
我得到一个错误:
'let'之后的块未完成。每个代码块都是 表达式,并且必须有结果。 'let'不能是最终代码 块中的元素。考虑给这个块一个明确的结果。
我在做什么错了?
答案 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