在OCaml中实现“早期退货”的一种方法是通过例外:
exception Exit
let myfunc () =
try
for i = 0 to .... do
if .. then raise Exit
done; false
with Exit -> true
但是,有没有办法在函数体中声明这个Exit
异常,所以它的名字对于模块中的其他函数是不可见的?
(* I would like to do this, but it gives a syntax error *)
let myfunc () =
exception Exit
try
for i = 0 to .... do
if .. then raise Exit
done; false
with Exit -> true
答案 0 :(得分:3)
是的,您可以使用本地模块:
let myfunc () =
let module M = struct exception Exit end in
try
for i = 0 to 3 do
if true then raise M.Exit
done; false
with M.Exit -> true
但这种风格并不是特别令人愉快,所以我不推荐它。如果要将其隐藏在程序的其他大部分内容中,则可以省略在下一个模块界面显示Exit
。