Модуль Fun
module Fun: sig .. end
Обработка функций.
- Since 4.08
Комбинаторы
val id : 'a -> 'a
id — это функция тождества. Для любого аргумента x, id x равно x.
val const : 'a -> 'b -> 'a
const c — это функция, которая всегда возвращает значение c. Для любого аргумента x, (const c) x равно c.
val compose : ('b -> 'c) -> ('a -> 'b) -> 'a -> 'c
compose f g — это композиция функций, применяющая сначала g, а затем f. Для любых аргументов f, g, и x, compose f g x равно f (g x).
- Since 5.2
val flip : ('a -> 'b -> 'c) -> 'b -> 'a -> 'c
flip f меняет порядок аргументов бинарной функции f. Для любых аргументов x и y, (flip f) x y равно f y x.
val negate : ('a -> bool) -> 'a -> bool
negate p — это отрицание предикатной функции p. Для любого аргумента x, (negate p) x равно not (p x).
Обработка исключений
val protect : finally:(unit -> unit) -> (unit -> 'a) -> 'a
protect ~finally work вызывает work () и затем finally () до того, как work () вернёт своё значение или исключение. В последнем случае исключение повторно поднимается после finally (). Если finally () поднимает исключение, то вместо него поднимается исключение Fun.Finally_raised.
protect может быть использован для обеспечения локальных инвариантов, независимо от того, возвращает ли work () значение нормально или поднимает исключение. Однако, он не защищает от непредвиденных исключений, поднятых внутри finally (), таких как Out_of_memory, Stack_overflow или асинхронных исключений, поднятых обработчиками сигналов (например, Sys.Break).
Примечание: это програмная ошибка, если другие типы исключений поднимаются finally, поскольку любое исключение, поднятое в work (), будет потеряно при возникновении исключения Fun.Finally_raised. Поэтому необходимо обработать их внутри finally.
exception Finally_raised of exn
Finally_raised exn поднимается protect ~finally work когда finally поднимает исключение exn. Это исключение обозначает либо непредвиденное исключение, либо програмную ошибку. Как правило, не следует ловить исключение Finally_raised за исключением обработки всех исключений.
© 1995-2024 INRIA.
https://ocaml.org/manual/5.2/api/Fun.html