2016-04-05 1 views
4

Selon la ligne 54 du fichier 'geting-started.clj' fourni avec Datomic (sous samples/seattle) je devrais pouvoir utiliser la fonction pull dans une requête comme ceci:Utilisation du Datomic Tirer une requête

(def pull-results (q '[:find (pull ?c [*]) :where [?c :community/name]] (db conn))) 

Cependant, dans mon code ci-dessous je reçois une erreur: IllegalArgumentException Argument [*] dans: trouver est pas datomic.query variable/validation-requête (query.clj: 315)

(defn get-tag [] (d/q '[:find (d/pull ?e [*]) 
         :where [?e :tag.tag/term]] (db conn))) 

Maintenant, à mes yeux, ces deux sont pareillement construits. Couplé avec le fait que la api fonction de traction lue par http://docs.datomic.com/clojure/#datomic.api/pull semble être:

(pull db pattern eid) 

Je dirais que l'API a changé depuis le code de Seattle a été écrit. Ai-je raison? Sinon, que se passe-t-il ici? Merci

+1

supprimer le 'd /' de 'd/pull' est ma conjecture. C'est la syntaxe dans ce cas. – ClojureMostly

+0

merci! qui l'a réparé. – Zuriar

Répondre

5

Comme le fait remarquer le commentateur, le problème passe la fonction datomic.api/pull au lieu d'utiliser une expression pull. Quelques points de clarification:

Vous n'êtes pas invoquer la fonction pull à l'intérieur de la requête, mais en utilisant une expression spéciale appelée pullexpression dans une clause find. Notez que la requête accepte un littéral de structure de données (pourquoi vous devez utiliser quote/'). L'expression pull fait partie du query grammar et quelque chose que l'analyseur datalog reconnaît, pas un appel direct de la fonction pull dans l'API Datomic qui a un appel différent.