Модуль Local_store
module Local_store: sig .. end
Этот модуль предоставляет средства для создания ссылок (и хеш-таблиц), которые можно легко сохранить и восстановить до произвольной версии.
Он используется на фронте (читай: типопроверке), для регистрации всего (ну, надеюсь) глобального состояния. Это облегчает инструментам, таким как Merlin, проверку типа разных файлов.
Создатели
val s_ref : 'a -> 'a ref
Аналогично Stdlib.ref, за исключением того, что выделенная ссылка регистрируется в хранилище.
val s_table : ('a -> 'b) -> 'a -> 'b ref
Используется для регистрации хеш-таблиц. Им также нужно поместить в ссылки для лёгкой замены, но нельзя просто «сохранить» начальное значение, чтобы создать новые экземпляры, поэтому требуется инициализатор.
Используйте так:
let my_table = s_table Hashtbl.create 42
Управление состоянием
Примечание: все следующие функции в настоящее время не используются в кодовой базе компилятора. В настоящее время их единственный пользователь — Merlin.
type store
val fresh : unit -> store
Возвращает новый экземпляр хранилища.
В первый раз при вызове этой функции сохраняется значение всех зарегистрированных ссылок, последующие вызовы fresh вернут экземпляры, инициализированные этими значениями.
val with_store : store -> (unit -> 'a) -> 'a
with_store s f сбрасывает все зарегистрированные ссылки на значение, которое у них есть в s для выполнения f. Если f обновит любую из зарегистрированных ссылок, s обновляется, чтобы запомнить эти изменения.
val reset : unit -> unit
Сбрасывает все ссылки до начального снимка (т. е. до тех же значений, с которыми начинаются новые экземпляры).
val is_bound : unit -> bool
Возвращает true когда хранилище активно (т. е. когда вызывается из обратного вызова, переданного в Local_store.with_store), false в противном случае.
© 1995-2024 INRIA.
https://ocaml.org/manual/5.2/api/compilerlibref/Local_store.html