我刚刚完成了一个马拉松调试会话,我最终设法将其缩减为以下代码。
(ns test)
(defrecord Person [name])
(comment
(def person (->Person "Sebastian"))
(instance? Person person)
)
因此,如果我在REPL中加载此文件,然后连续评估这两条评论,则第二条评论将评估为true
。但是,如果我重新加载文件并再次评估我将收到的第二条评论false
,直到我重新评估第一条评论。
到底发生了什么?
答案 0 :(得分:4)
defrecord
动态生成类Person
的编译字节码。
如果两次调用它,它将生成另一个具有相同名称的类。所以你要问的是,新类的实例是否是旧类的实例,false
。