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

时间:2017-10-15 02:52:39

标签: clojure read-eval-print-loop instanceof

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

(ns test)

(defrecord Person [name])

(comment

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

  (instance? Person person)

)

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

1 个答案:

答案 0 :(得分:4)

defrecord动态生成类Person的编译字节码。

如果两次调用它,它将生成另一个具有相同名称的类。所以你要问的是,新类的实例是否是旧类的实例,false