clojure datomic lighttable

clojure - Error "No hay función de lector" usando Datomic en Light Table



lighttable (3)

Cuando evalúo este código en la mesa de luz:

(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}]))

Yo obtengo:

clojure.lang.ExceptionInfo: No reader function for tag id core.clj:4327 clojure.core/ex-info

Alguien sabe lo que está pasando?


Parece que hay un problema al intentar establecer :person/id . Después de la parte #db/id[:db.part/user -1000001] , tiene una identificación temporal para agregar datos.

Debería poder comenzar a establecer atributos para la entidad usando cosas como cosas como :person/name name .

Si intenta crear un tipo de identificación pública, esta publicación de blog puede ser útil.


Este tutorial se atribuye a Stuart Halloway y Bobby Calderwood :

(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)

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


Es un problema en nREPL. La forma en que resolví esto es comenzar el REPL en la línea de comando con:

lein repl

Esto iniciará un proceso al que puede conectarse desde LightTable o Emacs. Imprimirá información como:

nREPL server started on port 51395 on host 127.0.0.1 ^^^^^

Ahora en LightTable, agregue una conexión -> Clojure Remote -> 127.0.0.1:XXXXX

El XXXXX debe ser igual al puerto impreso por lein repl.

Si estás en Emacs, la sidra tiene el mismo problema. Siga los mismos pasos para iniciar lein repl, luego use Mx sider-connect (su combinación de teclas predeterminada es Cc Mc).