为什么Datomic在迭代时连续两次产生相同的临时ID?
题
这将产生两个不同的id,这很棒:
#db/id[:db.part/user]
#db/id[:db.part/user]
但是像下面这样的东西(到目前为止我尝试了很多想法)会产生两次相同的id,这不是我想要的:
(repeatedly 2 (fn [] #db/id[:db.part/user]))
(for [n [1 2]] #db/id[:db.part/user])
都产生类似的东西
(#db/id[:db.part/user -1000774] #db/id[:db.part/user -1000774])
每个呼叫产生的号码是相同的。
我真正想要的是调用根本不产生数字,这样我就可以通过事务添加生成的数据。
有什么想法吗?
只是说清楚, 文件 说,"对tempid的每个调用都会产生一个唯一的临时id。"
[由@maxthoursie评论后编辑 repeat
无论如何都会有这个问题。]
解决方案
使用方法
(require '[datomic.api :as d])
(repeatedly 2 #(d/tempid :db.part/user))
;; => (#db/id[:db.part/user -1000118] #db/id[:db.part/user -1000119])
考虑一下#。..读取器宏是否意味着它们的值将在读取表达式时被解析,这自然只发生一次。使用#。..仅当您编写字面事务数据(如架构)时才使用宏。使用datomic。api/tempid在运行时生成tempid。
其他提示
不隶属于 StackOverflow