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
,则生成一个域将从父值派生子值(对于此键)。此计算发生在父域中,并且始终发生,无论子域是否使用它。如果拆分函数很昂贵或需要子域计算,请考虑使用 'a 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
关联的任何先前值,这些值无法在以后恢复。