模块 Domain.DLS

module DLS: sig .. end

域本地存储

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 如果调用域的域本地状态的键 k 与值 v 关联,则返回 v。否则使用其初始化器设置 k 的值并返回它。

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

set k v 将调用域的域本地状态更新为将键 k 与值 v 关联。它覆盖与 k 关联的任何先前值,这些值无法在以后恢复。