2013-03-12 9 views
8

Kiedy eval ten kod w lighttable:"Nie czytelnik funkcja" błąd przy użyciu Datomic w świetle tabeli

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

uzyskać:

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

Każdy wie, co się dzieje?

+1

Drajwer '# db/id' jest winowajcą. – vemv

Odpowiedz

0

Wygląda na to, że wystąpił problem podczas próby ustawienia :person/id. Po części #db/id[:db.part/user -1000001] masz tymczasowy identyfikator do dodawania danych.

Powinieneś być w stanie zacząć ustawiać atrybuty jednostki używając rzeczy takich jak rzeczy jak :person/name name.

Jeśli próbujesz utworzyć typ "publicznego identyfikatora", ta pomocna może być ta blog post.

2

Ten poradnik jest przypisana do stuart halloway i 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) 

Źródło: https://github.com/Datomic/day-of-datomic/blob/master/samples/literals_vs_code.clj

0

Jest to problem w nREPL. Sposób, w jaki rozwiązano to, aby rozpocząć rEPL w linii poleceń z:

lein repl 

Spowoduje to rozpoczęcie procesu, który można podłączyć do z LightTable lub Emacs. będzie drukować informacje, takie jak:

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

Teraz w LightTable, dodać połączenie -> Clojure Remote -> 127.0.0.1:XXXXX

xxxxx powinna wynosić port drukowany przez Lein repl.

Jeśli jesteś w Emacs, cydr ma ten sam problem. Wykonaj te same kroki, co przy uruchamianiu polecenia lein repl, a następnie użyj M-x cider-connect (domyślnym klawiszem jest C-c M-c).

Powiązane problemy