Clojure 当使用Datomic编码时-为什么println和pprint对临时ID的处理不同?

Clojure 当使用Datomic编码时-为什么println和pprint对临时ID的处理不同?,clojure,pretty-print,datomic,Clojure,Pretty Print,Datomic,在Datomic中,我可以获得如下临时ID: (ns demo (:require [datomic.api :as d] [clojure.pprint :refer :all]))) (d/tempid :db.part/db) 现在,当您使用println输出时,您会得到类似于: (println (d/tempid :db.part/db)) ;#db/id[:db.part/user -1000003] 现在我知道这是一个临时身份证 然而,当我用漂亮的印刷品

在Datomic中,我可以获得如下临时ID:

(ns demo
  (:require 
    [datomic.api :as d]
    [clojure.pprint :refer :all])))

(d/tempid :db.part/db)
现在,当您使用
println
输出时,您会得到类似于:

(println (d/tempid :db.part/db))
;#db/id[:db.part/user -1000003]
现在我知道这是一个临时身份证

然而,当我用漂亮的印刷品做同样的事情时,我得到了一些不同的东西:

(pprint (d/tempid :db.part/db))
;{:part :db.part/user, :idx -1000002}
这有什么不同?我缺少的临时ID有什么基本的东西吗

假设:

  • 以下是我在莱宁根的依赖关系:

    :依赖项[[org.clojure/clojure“1.6.0”]
    [com.datomic/datomic-free“0.9.5130”]


我的问题是:使用Datomic编码时-为什么
println
pprint
对临时ID的处理方式不同?

看起来
d/tempid
使用自定义
toString
方法返回记录或对象。当
println
打印带有名称的记录时,
pprint
将其打印为普通映射。在REPL上尝试以下操作:

user=>(defrecord MyRecord[a])
user.MyRecord
用户=>(def m(My.1))
#'用户/m
用户=>(println m)
#user.My{:a1}
无
user=>(clojure.pprint/pprint m)
{:a1}
无
#user.My{:a 1}
看起来与
#db/id[:db.part/user-1000003]
不完全一样,但是您可以看到对记录或其他对象使用
pprint
println
之间的区别

编辑:
(类型(d/tempid:db.part/user))
返回作为自定义类型的
datomic.db.DbId