BatReturn
Local exceptions/labels/goto/return.
This module defines a mechanism akin to SML's exception generators or to a generalization of C's return
, i.e. the ability to define local labels, which may be used for immediately terminating an expression and returning a value. By opposition to usual OCaml exceptions, this mechanism
Example:
let find_in_array a e =
label (fun label ->
for i = 0 to Array.length a - 1 do
if Array.get a i = e then return label (Some i)
done;
None)
@documents Return
val label : ('a t -> 'a) -> 'a
label f
creates a new label x
and invokes f x
. If, during the execution of f
, return x v
is invoked, the execution of f x
stops immediately and label f
returns v
. Otherwise, if f x
terminates normally and returns y
, label f
returns y
.
Calling return x v
from outside scope f
is a run-time error and causes termination of the program.
val with_label : ('a t -> 'a) -> 'a
as label
val return : 'a t -> 'a -> _
Return to a label. return l v
returns to the point where label l
was obtained and produces value l
.
Calling return l v
from outside the scope of l
(i.e. the call to function label
which produced l
) is a run-time error and causes termination of the program.