ここにこのサイトの名前のついた質問があります。ClojureコアキャッシュStackoverflow
なぜこのコードはClojureでStackOverflow例外をスローしますか?
(require [clojure.core.cache :as cache])
(def C (atom (cache/fifo-cache-factory {} :threshold 1E7)))
(doseq [i (range 1 1E6)]
(swap! C cache/miss i i))
私は次のようになります。私は自分のコードでconcat操作をしませんでした。 これは非常に再現性があります。私は
Caused by: java.lang.StackOverflowError
at clojure.lang.RT.seq(RT.java:507)
at clojure.core$seq__4128.invoke(core.clj:137)
at clojure.core$concat$fn__4215.invoke(core.clj:691)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.RT.seq(RT.java:507)
at clojure.core$seq__4128.invoke(core.clj:137)
at clojure.core$concat$fn__4215.invoke(core.clj:691)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.RT.seq(RT.java:507)
...........
...........
at clojure.core$concat$fn__4215.invoke(core.clj:691)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.RT.seq(RT.java:507)
at clojure.core$seq__4128.invoke(core.clj:137)
at clojure.core$concat$fn__4215.invoke(core.clj:691)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.RT.seq(RT.java:507)
at clojure.core$seq__4128.invoke(core.clj:137)
at clojure.core$concat$fn__4215.invoke(core.clj:691)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.RT.seq(RT.java:507)
at clojure.core$seq__4128.invoke(core.clj:137)
at clojure.core$concat$fn__4215.invoke(core.clj:691)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
at clojure.lang.LazySeq.seq(LazySeq.java:49)
at clojure.lang.RT.seq(RT.java:507)
at clojure.core$seq__4128.invoke(core.clj:137)
at clojure.core$concat$fn__4215.invoke(core.clj:691)
at clojure.lang.LazySeq.sval(LazySeq.java:40)
申し訳ありません。この問題の修正に関心のある人は、https://github.com/ravigit/core.cacheにアクセスしてください。変更はhttps://github.com/ravigit/core.cache/commit/c8a60dda1d3ff74b7f91eacf97ebcaa1eadb2c30?diff=splitです。自己責任で使用してください! – Ravi
'' prune-queue'は、 'remove'を呼び出してキューを遅延シーケンスに変換するので、修正する必要があります。 – amalloy
良い点。すぐに修正を提供します。 – Ravi