[英]Clojure's lazy-seq caching
在Practical Clojure中 ,作者提到一旦計算了一個懶惰的seq值,它就會被緩存。
如果我們從一個懶惰-SEQ得到一個非常大的數量的值,我們可能會看到內存外的錯誤? 或者是否有一種機制來防止這種情況(例如,刪除較舊的緩存值以便為新的緩存值騰出空間)?
懶惰序列中的已實現元素可以像Clojure中的任何其他對象一樣進行垃圾收集,但有一個重要的警告。 你不應該持有對序列頭部的引用。 這被稱為“抱頭”。
具體而言,使用doall
來評估整個序列,或者將參考(例如在原子或def
)存儲到惰性序列中,同時用map
遍歷它們都保持頭部。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.