在 Clojure 的 REPL 中重新加载记录时会发生什么?

What happens when reloading records in Clojure's REPL?

我刚刚完成了一个马拉松式的调试会话,我最终设法将其缩减为以下代码。

(ns test)

(defrecord Person [name])

(comment

  (def person (->Person "Sebastian"))

  (instance? Person person)

)

因此,如果我在 REPL 中加载此文件,然后连续评估两条评论,则第二条评论将评估为 true。但是,如果我随后重新加载文件并再次评估第二条评论,我将收到 false,直到我重新评估第一条评论。
这到底是怎么回事?

defrecord 为 class Person 动态生成编译后的字节码。

如果您调用它两次,它将生成另一个同名的 class。所以你问的是较新的 class 的实例是否是较旧的 class 的实例,即 false.