【问题标题】:Datomic - Dynamic Query FunctionsDatomic - 动态查询函数
【发布时间】:2018-06-25 21:15:30
【问题描述】:

我很惊讶这不起作用:

(d/q '[:find [?e ...]
         :in $ ?field ?op ?value
         :where [?e ?field ?x]
                [(?op ?x ?value)]
         ]
       db
       :my/field
       >
       10))

如果我在 where 子句中删除操作并显式地在 > 中编码,它就可以工作。我可以不使用输入参数来引用核心 clojure 函数吗?规则会有帮助吗?还是我需要在运行时使用 quoting/unquotinq 构建整个查询?

谢谢。

【问题讨论】:

    标签: clojure datomic


    【解决方案1】:

    试试这个:

    (defn invoke [f & args] (apply f args))
    
    (d/q '[:find [?e ...]
           :in $ ?field ?op ?value
           :where 
           [?e ?field ?x]
           [(myapp.utils.datomic/invoke ?op ?x ?value)]]
      db :my/field > 10)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多