scala - 在 Datomisca 中组合查询规则

标签 scala datomic

我正在尝试写一个 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/

相关文章:

scala - 如何分解带有前缀的结构列?

scala - Intellij 多模块 maven 项目,其中一个子模块中的更新不会传播到 war

datomic - Datomic 中的 SQL LIKE 运算符

amazon-web-services - 使用 Terraform 如何让 EC2 引用 Cloudformation Datomic 实例

clojure - 如何构造与DataScript中的引用向量完全匹配的查询?

scala - 如何在 Chisel 中将状态机拆分为多个类或特征?

scala - 使用 akka-http 执行 OAuth2 身份验证的最佳方法是什么?