2024 年 Clojure 状态调查! 中分享您的想法。

欢迎!有关如何操作的更多信息,请参阅 关于 页面。

+1
core.rrb-vector
重标记

预期

(reduce-kv vector nil [])
=> nil
(reduce-kv vector nil [1])
=> [nil 0 1]

CLJS 中的实际结果

(reduce-kv vector nil (clojure.core.rrb-vector/vec []))
Error: No item 0 in vector of length 0
    at Object.cljs$core$vector_index_out_of_bounds [as vector_index_out_of_bounds] (https://127.0.0.1:8080/cljs-runtime/cljs.core.js:19788:8)
    at Object.clojure$core$rrb_vector$rrbt$IVecImpl$_array_for$arity$2 (https://127.0.0.1:8080/cljs-runtime/clojure.core.rrb_vector.rrbt.js:1028:18)
    at Object.cljs$core$IKVReduce$_kv_reduce$arity$3 (https://127.0.0.1:8080/cljs-runtime/clojure.core.rrb_vector.rrbt.js:613:21)
    at Object.cljs$core$_kv_reduce [as _kv_reduce] (https://127.0.0.1:8080/cljs-runtime/cljs.core.js:2359:13)
(reduce-kv vector nil (clojure.core.rrb-vector/vec [1]))
=> [nil 0 1]

CLJ 中的实际结果

(reduce-kv vector nil (clojure.core.rrb-vector/vec [])) 
Execution error (IndexOutOfBoundsException) at clojure.core.rrb_vector.rrbt.Vector/arrayFor (rrbt.clj:806).
(reduce-kv vector nil (clojure.core.rrb-vector/vec [1])) 
=> [nil 0 1]

“vector nil” 部分在这里不是很重要,它只是为了证明调用 reduce-kv 的必要性。

周六晚上,忘记添加任何版本的详细信息

 :deps  {org.clojure/clojure              {:mvn/version "1.10.1"}
         org.clojure/clojurescript        {:mvn/version "1.10.597"}
         org.clojure/core.rrb-vector      {:mvn/version "0.1.1"}

3 个答案

+1

被选中
 
最佳答案

感谢您的报告。我可以在 core.rrb-vector 最新版本中重现此问题。
从快速查看来看,这很可能是简单修复的。实现 core.rrb-vector 向量的 reduce-kv 代码试图在用空向量调用时访问元素 0。它不应该这样做。在 kv-reduce 实现中这可能是简单的 1 行修复。

0
0

已发布 core.rrb-vector 版本 0.1.2。从版本 0.1.1 更改的唯一内容是修复了该问题,包括 core.rrb-vector 代码的 CLJ 和 CLJS 版本。

...