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