module Weak: Weak
type !'a
t
弱指针数组(弱数组)的类型。弱指针是一个值,当程序不再通过普通指针使用该值时,垃圾收集器可能会擦除该值。请注意,在擦除弱指针之前会运行终结函数,因为终结函数可以使值再次存活(在 4.03 之前,终结函数是在之后运行的)。
如果弱指针指向一个值,则称其为满的;如果该值被 GC 擦除,则称其为空的。
备注
output_value
或 Marshal
模块的函数进行封送。val create : int -> 'a t
Weak.create n
返回一个长度为 n
的新弱数组。所有指针最初都是空的。
Invalid_argument
,如果 n
不在零到 Obj.Ephemeron.max_ephe_length
(包含限制)之间。val length : 'a t -> int
Weak.length ar
返回 ar
的长度(元素数量)。
val set : 'a t -> int -> 'a option -> unit
Weak.set ar n (Some el)
将 ar
的第 n
个单元格设置为指向 el
的(满)指针;Weak.set ar n None
将 ar
的第 n
个单元格设置为为空。
Invalid_argument
,如果 n
不在 0 到 Weak.length
ar - 1
范围内。val get : 'a t -> int -> 'a option
Weak.get ar n
如果 ar
的第 n
个单元格为空,则返回 None;如果该单元格为满,则返回 Some x
(其中 x
是该值)。
Invalid_argument
,如果 n
不在 0 到 Weak.length
ar - 1
范围内。val get_copy : 'a t -> int -> 'a option
Weak.get_copy ar n
如果 ar
的第 n
个单元格为空,则返回 None;如果该单元格为满,则返回 Some x
(其中 x
是该值的(浅)副本)。除了可变值带来的陷阱外,与 get
的有趣区别在于,get_copy
不会阻止增量 GC 在其当前周期中擦除该值(get
可能会将擦除延迟到下一个 GC 周期)。
Invalid_argument
,如果 n
不在 0 到 Weak.length
ar - 1
范围内。如果元素是自定义块,则不会复制。val check : 'a t -> int -> bool
Weak.check ar n
如果 ar
的第 n
个单元格为满,则返回 true
;如果为空,则返回 false
。请注意,即使 Weak.check ar n
返回 true
,随后的 Weak.get
ar n
仍可能返回 None
。
Invalid_argument
,如果 n
不在 0 到 Weak.length
ar - 1
范围内。val fill : 'a t -> int -> int -> 'a option -> unit
Weak.fill ar ofs len el
将 ar
从 ofs
到 ofs + len - 1
的所有指针设置为 el
。
Invalid_argument
,如果 ofs
和 len
未指定 ar
的有效子数组。val blit : 'a t -> int -> 'a t -> int -> int -> unit
Weak.blit ar1 off1 ar2 off2 len
将 ar1
(从 off1
开始)的 len
个弱指针复制到 ar2
(从 off2
开始)。即使 ar1
和 ar2
相同,它也能正常工作。
Invalid_argument
,如果 off1
和 len
未指定 ar1
的有效子数组,或者 off2
和 len
未指定 ar2
的有效子数组。弱哈希集是值的哈希集。每个值在程序的其余部分不再使用时,都可能会从该集中神奇地消失。这通常用于共享数据结构,而不会导致内存泄漏。弱哈希集是在来自 Hashtbl.HashedType
模块的值上定义的;equal
关系和 hash
函数取自该模块。如果 equal x v
为 true
,则我们说 v
是 x
的一个实例。
equal
关系必须能够处理值的浅拷贝,并与值本身产生相同的结果。
不同步访问
对弱哈希集的不同步访问是编程错误。对弱哈希集的不同步访问可能导致弱哈希集状态无效。因此,对弱哈希集的并发访问必须同步(例如,使用 Mutex.t
)。
module type S =sig
..end
函子 Weak.Make
的输出签名。
module Make:
构建弱哈希集结构实现的函子。