我已經繼承了一些輪詢更新的代碼,將這些更新附加到延遲序列並處理。從clojure 1.7.0-alpha5升級到任何更高版本後,由於惰性序列的chunking
代碼顯示中斷。我寫了一個例子來說明這個問題:處理無限(懶惰)序列
(defn infinite-updates
[]
(letfn [(step [n]
(lazy-seq
;; Poll for an update
(Thread/sleep 3000)
(cons n (step (rand-int 5)))))]
(lazy-seq
(step (rand-int 5)))))
;; Run with:
(doseq [t (sequence (map inc) (infinite-updates))] (println t))
該項目上的Clojure 1.7.0-素α5β1和作品本身:每3秒t
打印。
一旦我升級超過該修訂版,它會將結果分塊,因此在大約1.5分鐘後打印出32 t
。
我已經使用了以下嘗試:
(defn unchunk [s]
(when (seq s)
(lazy-seq
(cons (first s)
(unchunk (next s))))))
爲unchunk
,沒有運氣的數據。
我該如何處理這些更新,因爲它們是可用的還是有更通俗的方式來編寫infinite-updates
,這樣我可以在不依賴懶惰seq的情況下處理所有更新?