我第一次尝试在ocaml中编写命令式代码以尝试回答本网站上的问题,但我遇到了一个小问题。
let f() =
try
while true do
()
done
with
_ -> 2
他不喜欢这个,因为他认为这个函数返回单元,就像它在try块中一样,但try块返回一个int。因此,如果我在“完成”之后添加3,它会起作用,但它真的很难看,因为3真的永远不会返回。
你是怎么做到的?
答案 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编译器对此不满意。