gpt4 book ai didi

clojure - Datomic 的交易 API

转载 作者:行者123 更新时间:2023-12-04 20:28:14 25 4
gpt4 key购买 nike

当然是一个愚蠢的问题,但希望应该澄清事情。

我正在关注 https://docs.datomic.com/on-prem/getting-started/transact-schema.html ,在本教程中,处理架构的步骤是

user=> (d/transact conn {:tx-data movie-schema})

然而,当我尝试这个时,我得到
ClassCastException clojure.lang.PersistentArrayMap cannot be cast to java.util.List  datomic.api/transact 

相反,当我只是做
(d/transact conn schema)

这个对我有用。教程在这里是否缺少一些微妙之处?我错过了什么吗? (唯一的区别是我使用的是免费版而不是 Starter Pro 版)。

编辑:这篇文章的初始版本提到了模式,但这通常也适用于添加新事实(即使用 {:tx-data foo} 不起作用,但仅使用 foo 起作用)。

最佳答案

我认为您的问题的原因是 Peer API 之间的不一致。 (其中 transact 接受一个列表)和 Client API (其中 transact 接受包含 :tx-data 键的映射)。我怀疑你试图在 Peer 进程的 REPL 中运行你的 REPL 命令,而 tutorial您链接到 expects您可以在客户端进程的 REPL 中运行命令。

为什么 Peer 和 Client 之间不一致?不是 Datomic 团队的一员,我只能推测:

  • Peer API 历史上是在 Client API 之前设计的,当时“交易请求作为列表”格式就足够了
  • 在设计客户端 API 时,因为调用 d/transact 的成本更高(我相信它会导致从客户端到服务器的额外 I/O 往返),作者为事务请求中的额外数据(例如模板)留出了空间,因此基于 map 的格式更具可扩展性。
  • 关于clojure - Datomic 的交易 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53139065/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com