我正在关注 Datomic 示例架构,并且有一个实体的 ID 定义为
:db/id #db/id[:db.part/db]
#db/id是什么意思?模式加载了读取字符串,所以我猜它是有效的 Clojure 语法。
这是 Clojure 1.4 中的一个新特性:阅读器文字。
Jouni 是对的,它是读者的文字。
更具体地说,阅读器文字#db/id[:db.part/db]将在:db.part/db分区内创建一个临时实体 ID。
这个临时 id 可以在构建事务时使用。如果事务成功应用于数据库(即“事务”),则临时 id 将替换为数据库中的永久实体 id。
这个特定阅读器文字的一般形式是#db/id[partition-name value*],其中 value 是一个可选的负值,它允许在单个事务中唯一且确定地区分临时 id。
这是一个很大的方便,例如。#db/id[:db.part/user -300]可以在特定事务中的多个位置使用,以引用同一个尚未创建的实体。