【问题标题】:Wrapping Datascript query in a function?在函数中包装 Datascript 查询?
【发布时间】:2020-05-29 20:33:24
【问题描述】:

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

编辑:已解决here

【问题讨论】:

  • 如果您 x-post 并在其他地方找到了答案:在 SO 上为您的问题提供您自己的答案并接受它是非常好的,如果这解决了您的问题。

标签: clojure clojurescript datalog datascript


【解决方案1】:

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

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

【讨论】:

  • 这是有道理的,但我有另一个函数可以包装具有相同结构的查询并且工作正常。唯一的区别是它正在寻找不同属性的值。
猜你喜欢
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 2021-10-29
  • 2022-01-14
  • 1970-01-01
  • 2021-11-05
相关资源
最近更新 更多