模块 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

当存储处于活动状态时(即,从传递给 Local_store.with_store 的回调中调用时)返回 true,否则返回 false