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
当存储处于活动状态时(即,从传递给 Local_store.with_store
的回调中调用时)返回 true
,否则返回 false
。