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