在尝试之后返回类型

时间:2013-08-13 05:17:11

标签: while-loop try-catch ocaml imperative-programming

我第一次尝试在ocaml中编写命令式代码以尝试回答本网站上的问题,但我遇到了一个小问题。

let f() =
try
  while true do
    ()
  done
with
    _ -> 2

他不喜欢这个,因为他认为这个函数返回单元,就像它在try块中一样,但try块返回一个int。因此,如果我在“完成”之后添加3,它会起作用,但它真的很难看,因为3真的永远不会返回。

你是怎么做到的?

2 个答案:

答案 0 :(得分:7)

使用assert false,它总是引发异常,因此可以在任何预期类型的​​地方使用:

let f() =
  try
    while true do
      ()
    done;
    assert false
  with
      _ -> 2

答案 1 :(得分:4)

  • (以及 for )OCaml中的循环是返回 unit 类型结果的表达式。

  • 此外,当你写(试用expr1与_ - > expr2 )时,这是一个类型为 t 的OCaml表达式,如果 expr1 expr2 的类型 t (多态性更复杂)

  • 但是,在您的示例中,尝试分支的类型为 unit ,而 with 分支的类型为 int 。 OCaml编译器对此不满意。