Clojure / Datomic Reader Macro Gotcha

As transações de esquema datômico são bastante prolixas, então criei um pequeno auxiliar para mim …

(defn attr [ident type]
{:db/id #db/id [:db.part/db]
:db/ident ident
:db/valueType type
:db/cardinality :db.cardinality/one
:db.install/_attribute :db.part/db})

Identificou o erro? Não, bem, demorei um pouco para descobrir também. As macros do Reader são expandidas (como o nome sugere) em tempo de compilação como as macros normais. Portanto, a macro # db / id reader para criar um novo ID temporário só é executada uma vez, dando a todos os meus atributos o mesmo ID.

Doh! Então, eu preciso mudar para (apenas a mudança mostrada) …

:db/id (d/tempid :db.part/db)

Portanto, apenas algo para se lembrar ao usá-los.