首页 > 解决方案 > 在函数中包装 Datascript 查询?

问题描述

使用 Datascript 遇到一个看似奇怪的问题。出于某种原因,当我在没有将其包装在函数中的情况下运行此查询时,一切正常。但是一旦我将它包装在一个函数中,它就会为数据库中的每个实体返回 :block/content 的值。我很困惑,因为过去我在包装其他 Datascript 查询方面没有遇到任何问题。有没有比我更有经验的 Datascript 看到任何问题?

;; Works fine and returns the correct value
(ds/q '[:find ?block-text
        :where
        [?id :block/id "l_63xa4m1"]
        [?id :block/content ?block-text]]
      @conn)

;; Returns every value for `:block/content` in the db
(defn content-find
  [id-passed]
  (ds/q '[:find ?block-text
          :where
          [?id :block/id ?id-passed]
          [?id :block/content ?block-text]]
        @conn))
(content-find "l_63xa4m1")

编辑:这里解决

标签: clojureclojurescriptdatalogdatascript

解决方案


在您的defn版本中,您使用的是查询子句[?id :block/id ?id-passed]。这实际上并不使用id-passed您传递给函数的参数。

我不确定如何正确传递参数。我相信有一个:in条款左右?


推荐阅读