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
。