module Weak: Weak
type !'a
t
弱指標陣列(弱陣列)的類型。弱指標是一種值,當程式不再使用該值(透過一般指標)時,垃圾回收器可能會將其清除。請注意,終結函數會在弱指標被清除之前執行,因為終結函數可以使值再次存活(在 4.03 之前,終結函數是在之後執行)。
若弱指標指向一個值,則稱其為「滿的」;若該值已被 GC 清除,則稱其為「空的」。
注意事項
output_value
或 Marshal
模組的函數進行序列化。val create : int -> 'a t
Weak.create n
會回傳一個長度為 n
的新弱陣列。所有指標一開始都是空的。
Invalid_argument
異常,若 n
不在 0 到 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
函數取自該模組。我們會說 v
是 x
的實例,如果 equal x v
為 true
。
equal
關係必須能夠在值的淺複製上運作,並給出與值本身相同的結果。
非同步存取
對弱雜湊集合的非同步存取是程式設計錯誤。對弱雜湊集合的非同步存取可能會導致弱雜湊集合的狀態無效。因此,必須同步對弱雜湊集合的並行存取(例如使用 Mutex.t
)。
module type S =sig
..end
函子 Weak.Make
的輸出簽名。
module Make:
建立弱雜湊集合結構實作的函子。