我很惊讶这没有用:
(d/q '[:find [?e ...]
:in $ ?field ?op ?value
:where [?e ?field ?x]
[(?op ?x ?value)]
]
db
:my/field
>
10))
如果我删除了op并在where子句中的>中显式编码,它将起作用。我可以不使用输入参数来引用核心Clojure函数吗?规则会有所帮助吗?还是我需要在运行时使用quoting / unquotinq建立整个查询?
谢谢。
答案 0 :(得分:2)
尝试一下:
(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)