在尝试之后返回类型

bru*_*ard 3 ocaml try-catch imperative-programming while-loop

几乎是我第一次尝试在ocaml中编写命令式代码以尝试回答本网站上的问题,但我面临一个小问题.

let f() =
try
  while true do
    ()
  done
with
    _ -> 2
Run Code Online (Sandbox Code Playgroud)

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

你怎么做到这一点 ?

Mar*_*bon 7

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

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