代码之家  ›  专栏  ›  技术社区  ›  Matheus Miranda

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

f#
  •  1
  • Matheus Miranda  · 技术社区  · 6 年前

    代码如下:

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

    我得到了一个错误:

    “let”后面的块未完成。每个代码块都是 表达式和必须有结果。'不可能是最后一个代码 块中的元素。考虑给这个块一个明确的结果。

    我做错什么了?

    2 回复  |  直到 6 年前
        1
  •  8
  •   AMieres    6 年前

    问题是 let 它本身不是一种表达:

    在F中,一切都是某种类型的表达。但是 单独不是一个表达式,是一个绑定,它必须用一些表达式来继续,假定该表达式使用绑定到ID的值 result .

    因为您只是在测试Try/Catch功能。我假设您对生成任何值没有真正的兴趣,这就是我添加表达式的原因: () .

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

    这个 try/with 表达式要求两边返回相同类型的值,就像 if/then/else 做。自从在 with printfn 收益率 unit 我做了 try 侧边也返回A 单元 价值就是 () . 把它当作等同于 void 在C语言中。

        2
  •  2
  •   m0nhawk Pasqui    6 年前

    我可以推荐不同的方法。这不会离开 result 变量未定义。

    let result =
        try
            Some(100/0)
        with
            | :? Exception as ex -> printfn "%s" ex.Message; None