在 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
.
我刚刚完成了一个马拉松式的调试会话,我最终设法将其缩减为以下代码。
(ns test)
(defrecord Person [name])
(comment
(def person (->Person "Sebastian"))
(instance? Person person)
)
因此,如果我在 REPL 中加载此文件,然后连续评估两条评论,则第二条评论将评估为 true
。但是,如果我随后重新加载文件并再次评估第二条评论,我将收到 false
,直到我重新评估第一条评论。
这到底是怎么回事?
defrecord
为 class Person
动态生成编译后的字节码。
如果您调用它两次,它将生成另一个同名的 class。所以你问的是较新的 class 的实例是否是较旧的 class 的实例,即 false
.