模組 Domain.DLS

module DLS: sig .. end

領域本地儲存 (Domain-local Storage)

type 'a key 

DLS 鍵的類型

val new_key : ?split_from_parent:('a -> 'a) -> (unit -> 'a) -> 'a key

new_key f 回傳一個新的鍵,該鍵綁定到初始化函式 f,用於存取領域本地變數。

如果沒有提供 split_from_parent,則新領域的值將由新領域按需計算:第一次呼叫 get 將呼叫初始化函式 f 並儲存該值。

如果提供了 split_from_parent,則產生領域會從父領域的值派生出子領域的值(針對此鍵)。此計算發生在父領域中,並且總是發生,無論子領域是否會使用它。如果分割函式很耗時或需要子端計算,請考慮使用 'Lazy.t key

        let init () = ...

        let split_from_parent parent_value =
          ... parent-side computation ...;
          lazy (
            ... child-side computation ...
          )

        let key = Domain.DLS.new_key ~split_from_parent init

        let get () = Lazy.force (Domain.DLS.get key)
        

在這種情況下,部分計算發生在子領域中;特別是,它可以與父領域並行存取 parent_value,這可能需要明確的同步以避免資料競爭。

val get : 'a key -> 'a

get k 回傳 v,如果值 v 與呼叫領域的領域本地狀態上的鍵 k 關聯。否則,將 k 的值設為其初始化函式並回傳它。

val set : 'a key -> 'a -> unit

set k v 更新呼叫領域的領域本地狀態,將鍵 k 與值 v 關聯。它會覆蓋任何先前與 k 關聯的值,這些值無法稍後還原。