3

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

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

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

你怎么做到这一点 ?

4

2 回答 2

7

Use assert false,它总是会引发异常,因此可以在任何需要类型的地方使用:

让 f() =
  尝试
    虽然真的做
      ()
    完毕;
    断言假
  和
      _ -> 2
于 2013-08-13T05:21:20.383 回答
4
  • OCaml 中的while(和for )循环是返回unit类型结果的表达式。

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

  • 但是,在您的示例中,try branch 的类型为unitwith branch 的类型为int。OCaml 编译器对此并不满意。

于 2013-08-13T13:26:33.470 回答