您的REPL尝试以某种有用的方式打印wrapper,这包括deref它后得到的值。
(defn- deref-as-map [^clojure.lang.IDeref o]
(let [pending (and (instance? clojure.lang.IPending o)
(not (.isRealized ^clojure.lang.IPending o)))
[ex val]
(when-not pending
(try [false (deref o)]
(catch Throwable e
[true e])))]
{:status
(cond
(or ex
(and (instance? clojure.lang.Agent o)
(agent-error o)))
:failed
pending
:pending
:else
:ready)
:val val}))
(defmethod print-method clojure.lang.IDeref [o ^Writer w]
(print-tagged-object o (deref-as-map o) w))
请注意,打印promise没有问题,因为上面的第一个函数明确检查了它。