暫時性資料結構總是從現有的持續性 Clojure 資料結構建立。從 Clojure 1.1.0 開始,支援向量、雜湊映射和雜湊集合。請注意,並非所有 Clojure 資料結構都能支援此功能,但大多數都能。清單不行,因為沒有好處可得。
您可以透過呼叫 transient 來取得資料結構的暫時性「複製」。這會建立一個新的暫時性資料結構,它是來源的複製,並具有相同的效能特性。事實上,它大部分就是來源資料結構,並突顯了暫時性的第一個特點 - 建立一個暫時性資料結構是 O(1)。它與其來源共用結構,就像持續性複製共用結構一樣。
暫時性的第二個特點是建立一個暫時性資料結構不會修改來源,而且無法透過使用暫時性資料結構來修改來源。您的來源資料永遠都是不可變且持續的。
暫存支援來源的唯讀介面,也就是說,你可以呼叫暫存向量的nth、get、count和函數呼叫,就像持久向量一樣。
暫存不支援來源資料結構的持久介面。assoc、conj等都會擲回例外,因為暫存並非持久。因此,你無法意外地將暫存洩漏到需要持久性的內容中。
暫存支援一組平行的「變更」操作,其名稱類似,後面加上! - assoc!、conj!等。這些操作與其持久對應項執行相同的工作,但回傳值本身是暫存的。特別注意,暫存並非設計成在原處進行猛擊。你必須擷取並在下次呼叫中使用回傳值。如此一來,它們支援與其取代的功能性持久程式碼相同的程式碼結構。正如範例所示,這將讓你能夠輕鬆地提升程式碼效能,而無需進行結構變更。
當你完成建立結果時,你可以透過對暫存呼叫persistent!來建立持久資料結構。此操作也是 O(1)。呼叫persistent!後,不應使用暫存,且所有操作都會擲回例外。對於你可能建立的任何別名,這也是正確的。