2

我经常需要在 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 whileway,有时用exceptionway?

4

1 回答 1

5

与其他语言相比,ocaml 中的异常非常快(只要您使用原始编译器即可。对于 js_of_ocaml、ocaml-java 等情况有所不同)

但是,使用复杂的 while 循环的解决方案仍然会快一点。我不会关心最小的速度差异,如果代码更容易阅读例外 - 至少在大多数情况下。

于 2013-06-05T10:54:07.733 回答