Datomic 中的数据库函数,特别是事务数据库函数,对于保持一致性非常有用。在文档中的例子是用 edn 来写的。象这样:
;;add a transaction function called add-doc
[{:db/id #db/id [:db.part/user]
:db/ident :add-doc
:db/fn #db/fn {:lang "java"
:params [db e doc]
:code "return list(list(\":db/add\", e, \":db/doc\", doc));"}}]
其中的引号还要 Escape,实在有些不顺眼。好在 datomic 的 Clojure API 提供了 function 函数:
(def add-doc
"Add document to an entity"
(d/function {:lang "clojure"
:params '[db e doc]
:code '[[:db/add e :db/doc doc]]}))
这样实现的好处不只是使用 ' 来创造 quote 的代码,它的另一个玄机在于它返回了一个真正的函数!这个 add-doc 是可以在你的本地代码上调用的,这让单元测试数据库函数成为可能。
将这个函数安装到数据库:
[{:db/id #db/id [db.part/user]
:db/doc (-> #'add-doc meta :doc) ;重用上面的文档
:db/fn add-doc}]
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。