2016-04-26 46 views
1

我建立Datomic交易具有这种功能,这我然后在输入关键字列表映射:cond为什么显示'缓存'一个内部绑定?

(defn build-enum-transaction [inp] 
    (cond 
    (.contains (namespace (first inp)) "region") 
     [:db/add #db/id[:db.part/region] :db/ident (first inp)] 
    (.contains (namespace (first inp)) "sector") 
     [:db/add #db/id[:db.part/sector] :db/ident (first inp)] 
    (.contains (namespace (first inp)) "specialism") 
     [:db/add #db/id[:db.part/specialism] :db/ident (first inp)])) 

(defn build-all-enum-transactions [inp] 
    (vec (map build-enum-transaction inp))) 

的输入数据集结全枚举交易是:

([:region/EU] 
[:region/UK] 
[:region/NAFTA] 
[:sector/NON-CYCLICALS] 
[:sector/FINANCIALS] 
[:specialism/INSURANCE] 
[:specialism/VAT]) 

我得到以下结果:

[[:db/add #db/id[:db.part/region -1000289] :db/ident :region/EU] 
[:db/add #db/id[:db.part/region -1000289] :db/ident :region/UK] 
[:db/add #db/id[:db.part/region -1000289] :db/ident :region/NAFTA] 
[:db/add #db/id[:db.part/sector -1000290] :db/ident :sector/NON-CYCLICALS] 
[:db/add #db/id[:db.part/sector -1000290] :db/ident :sector/FINANCIALS] 
[:db/add #db/id[:db.part/specialism -1000291] :db/ident :specialism/INSURANCE] 
[:db/add #db/id[:db.part/specialism -1000291] :db/ident :specialism/VAT]] 

正如你所看到的,:db.part/应为每个'cond'从句产生一个递增数字。为什么是这样?看起来好像'cond'正在关闭价值并重新使用它。谢谢。

回答

2

您应该使用d/tempid在运行时创建tempid。 #db/id是一个阅读器宏,当程序被读取时会扩展到一个临时的,即编译时间。

相关问题