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

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

+1 投票
文档

来自https://github.com/clj-kondo/clj-kondo/issues/1258
在transients的某些函数上,特别是`assoc!`,即使不处理返回类型也似乎可以正常工作

user> (let [t (transient {})]
        (assoc! t :foo :bar)
        (persistent! t))
;; => {:foo :bar}
user>

当映射中的条目超过8条时,这会导致崩溃

user> (let [t (transient {})]
        (doseq [i (range 10)]
          (assoc! t (str i) i))
        (persistent! t))
;; => {"0" 0, "1" 1, "2" 2, "3" 3, "4" 4, "5" 5, "6" 6, "7" 7}
user> 

这种现象似乎偶尔会影响初学者和资深的Clojure程序员
因此,可能值得在文档字符串中添加一个注意事项

尽管`conj!`(以及可能的其他transient上的函数)似乎可以不处理返回类型就工作,但这可能只是实现细节,因此可能也应该在那里设置一个警告

1 个解答

0 投票

已被选择
 
最佳回答

这已在以下记录中记录:https://clojure.atlassian.net/browse/CLJ-1385(我认为它正在等待我给出更好的信息,iirc)。

...