请在2024 Clojure现状调查!中分享您的想法。

欢迎!请参阅关于页面,以了解更多关于这个工作原理的信息。

0
data.fressian
在运行https://github.com/danielcompton/data.fressian-test上的测试时,我发现了这个bug


(let [mys {[3] [] :a nil, :b nil :c nil :d nil :e nil :f nil :g nil}
      myf (fr/read (fr/write mys))]
  (println (type mys))
  (println (type (key (first mys))))
  (println (type myf))
  (println (type (key (first myf))))
  (= mys myf))
clojure.lang.PersistentArrayMap
clojure.lang.PersistentVector
clojure.lang.PersistentHashMap
java.util.Arrays$ArrayList
=> false


将键[3]更改为:x

{:x [] :a nil, :b nil :c nil :d nil :e nil :f nil :g nil}


或删除另一个键值对

{[3] [] :b nil :c nil :d nil :e nil :f nil :g nil}


将使Fressian值的双向编码相同。

这是由于1.6中引入的哈希行为变化导致的,与CLJ-1372相关。我觉得这可能与Fressian为具有不到8个键值对的映射创建数组的交互有关。

一个解决办法是确保data.fressian始终返回持久Clojure数据结构,以避免遇到Clojure不再将Java数据结构与其对应的Clojure结构视为相等的问题。

2 个答案

0

评论者:[email protected]

明确问题。

0
...