首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Light Table中使用Datomic时出现"No reader function“错误

在Light Table中使用Datomic时出现"No reader function“错误
EN

Stack Overflow用户
提问于 2013-03-13 06:26:55
回答 3查看 944关注 0票数 8

当我在lighttable中评估这段代码时:

代码语言:javascript
复制
(ns app.core
  (:require [datomic.api :refer [q] :as d]
            :reload-all))

(defn add-person
  [conn id]
  (d/transact conn [{:db/id #db/id[:db.part/user -1000001]
                     :person/id id}]))

我得到了:

代码语言:javascript
复制
clojure.lang.ExceptionInfo: No reader function for tag id
core.clj:4327 clojure.core/ex-info

有人知道这是怎么回事吗?

EN

回答 3

Stack Overflow用户

发布于 2013-03-27 00:27:29

本教程归功于stuart hallowayBobby Calderwood

代码语言:javascript
复制
(use :reload 'datomic.samples.repl)
(easy!)
(def conn (scratch-conn))

;; in data, use data literals for tempids
(def tx-data [{:db/id #db/id[:db.part/user]
               :db/doc "Example 1"}])
(transact conn tx-data)

;; in code, call tempid to create tempids
(let [id (tempid :db.part/user)
      doc "Example 2"]
  (transact conn [{:db/id id :db/doc doc}]))

;; same argument applies to functions:
;; use #db/fn literals in data
;; use Peer.function or d/function in code

;; broken, uses db/fn literal in code
(transact conn [{:db/id #db/id [:db.part/user]
                 :db/ident :hello
                 :db/fn #db/fn {:lang "clojure"
                                :params []
                                :code '(println :hello)}}])

;; corrected: used d/function to construct function
(transact conn [{:db/id (d/tempid :db.part/user)
                 :db/ident :hello
                 :db/fn (d/function {:lang "clojure"
                                     :params []
                                     :code '(println :hello)})}])
(d/invoke (db conn) :hello)

来源https://github.com/Datomic/day-of-datomic/blob/master/samples/literals_vs_code.clj

票数 2
EN

Stack Overflow用户

发布于 2013-03-20 23:24:37

似乎在尝试设置:person/id时出现了问题。在#db/id[:db.part/user -1000001]部分之后,您就获得了一个用于添加数据的临时id。

您应该能够开始使用诸如:person/name name之类的东西来设置实体的属性。

如果你想创建一个“公共id”类型的东西,这个blog post可能会有帮助。

票数 0
EN

Stack Overflow用户

发布于 2014-04-06 22:02:59

这是nREPL中的一个问题。我解决这个问题的方法是在命令行中使用以下命令启动REPL:

代码语言:javascript
复制
lein repl

这将启动一个进程,您可以从LightTable或Emacs连接到该进程。它将打印如下信息:

代码语言:javascript
复制
nREPL server started on port 51395 on host 127.0.0.1
                             ^^^^^

现在在LightTable中,添加一个连接-> Clojure Remote -> 127.0.0.1:XXXXX

XXXXX应等于lein repl输出的端口。

如果你在Emacs,苹果酒也有同样的问题。按照启动lein repl的相同步骤,然后使用M-x cider-connect (它的缺省键绑定是C-c M-c)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15373486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档