我经常需要在 OCaml 中打破一个循环,至少有两种方法:
(* by exception *)
try
for i = 0 to 100 do
...
if cond then raise BreakLoop
done;
...
with BreakLoop -> ...
(* by while *)
let cond = ref false in
let i = ref 0 in
while (not !cond) && (i<= 100) do
...
i := !i + 1
done;
if !cond then ...
我最关心的就是运行时间的优化,只要程序可以很容易阅读和理解。while
当有多个嵌套循环时,这种方式会使循环变得复杂。
我在 Internet 的某个地方看到人们说在 OCaml 中抛出和捕获异常的成本很高。如果是真的,谁能证实我?
所以我们应该有时用way by while
way,有时用exception
way?