我正在尝试写一个 Datomic使用 Scala 包装器调用 2 个规则的查询 Datomisca .
如何组合两个单独的查询?
我的代码如下所示:
val rule1 = Query.rules("[[(rule1 ?a) [ ... ]]]")
val rule2 = Query.rules("[[(rule2 ?b) [ ... ]]]")
Datomic.q(Query("""[:find ?x
:in $ % %
:where (rule1 ?a) (rule2 ?b)]"""), conn.db(), rule1, rule2)
这给了我一个关于“无法解析 key
rule1
”的错误。我只用了一个 %
,但它不会编译(类型不匹配)。我不想在调用
Query.rules
时将它们组合在一个字符串中,因为这意味着我必须重复它们以使用不同的规则组合(例如:一个查询同时包含两个查询,另一个查询只包含规则 1)。自
Query.rules
是一个宏,我必须使用文字字符串值,否则将无法编译。
最佳答案
您可以通过将规则视为 String
来组合规则。 s 可以连接它们。您没有获得静态类型检查的好处,但我还没有找到任何其他方法。
val rule1 = "[[(rule1 ?a) [ ... ]]]"
val rule2 = "[[(rule2 ?b) [ ... ]]]"
Datomic.q(Query(...), conn.db(), DString(s"[$rule1 $rule2]"), ...)
关于scala - 在 Datomisca 中组合查询规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21100749/