2024 年 Clojure 状态调查!中分享您的想法。

欢迎!请访问关于页面以了解更多此网站的工作方式。

0

在使用 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")

1 答案

+4

在查询中的 id-passed 函数参数和 ?id-passed 符号之间没有链接,您需要指定 ?id-passed 是一个查询参数,并将其传递给查询

(defn content-find
  [id-passed]
  (ds/q '[:find ?block-text
          :in $ ?id-passed
          :where
          [?id :block/id ?id-passed]
          [?id :block/content ?block-text]]
        @conn id-passed))
...