module Weak:sig
..end
弱指標陣列和弱指標雜湊集合。
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
會將 len
個弱指標從 ar1
(從 off1
開始)複製到 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:
建立弱雜湊集合結構的函子。