clojure.lang.PersistentHashMap 的 ObjectInputStream

ObjectInputStream with clojure.lang.PersistentHashMap

我有一个奇怪的问题。

  1. 如果我使用 String、Long 类型的 clojure 映射
  2. 使用 java.io.ObjectInputStream 使用 Clojure 1.6.0
  3. 对其进行序列化
  4. 使用 java.io.ObjectInputStream 使用 Clojure 1.5.1
  5. 对其进行反序列化

我可以在 repl 中打印新地图,使用 vals 获取所有值,使用 keys 获取所有键,但是我无法使用 get.[=18 获取值=]

(get new-map "stringkey") => nil

但是,into {} 解决了问题。

我很欣赏在使用 Java 序列化时切换版本可能不是一个好主意,我确实可以解决这个问题,但我现在想知道为什么会发生这种情况?

Clojure 的散列代码在 1.6 中发生了变化,get 依赖于正在查找的键的散列。