几乎是我第一次尝试在 ocaml 中编写命令式代码来尝试回答这个网站上的问题,但我遇到了一个小问题。
let f() =
try
while true do
()
done
with
_ -> 2
他不喜欢这样,因为他认为这个函数返回单位,就像在 try 块中一样,但是 try 块返回一个 int。因此,如果我在“完成”之后添加 3,它会起作用,但它真的很难看,因为 3 真的永远不会返回。
你怎么做到这一点 ?
几乎是我第一次尝试在 ocaml 中编写命令式代码来尝试回答这个网站上的问题,但我遇到了一个小问题。
let f() =
try
while true do
()
done
with
_ -> 2
他不喜欢这样,因为他认为这个函数返回单位,就像在 try 块中一样,但是 try 块返回一个 int。因此,如果我在“完成”之后添加 3,它会起作用,但它真的很难看,因为 3 真的永远不会返回。
你怎么做到这一点 ?
Use assert false
,它总是会引发异常,因此可以在任何需要类型的地方使用:
让 f() = 尝试 虽然真的做 () 完毕; 断言假 和 _ -> 2
OCaml 中的while(和for )循环是返回unit类型结果的表达式。
此外,当您编写(尝试 expr1 与 _ -> expr2 )时,这是一个t类型的 OCaml 表达式,如果expr1和expr2是类型 t 的良好类型(多态性更复杂)
但是,在您的示例中,try branch 的类型为unit而with branch 的类型为int。OCaml 编译器对此并不满意。