请在 2024 年 Clojure 状态调查! 中分享您的想法。

欢迎!请参阅 关于 页面以了解更多信息。

0
Spec

我想使用 specs 验证 Datomic 实体。然而,s/keys 在这一点上过于严格,因为它要求输入集合符合 clojure.core/map?,而不是一些更原始的接口(例如 clojure.lang.ILookup 或 clojure.lang.Associative)。

7 个答案

0

评论者:alexmiller

s/keys 使用 IPersistentMap 的可迭代支持来遍历所有条目进行验证。ILookup 和 Associative 不支持迭代。所以这就是它的原因。但请理解这种需求。

0

评论者:alexmiller

Datomic 实体是可迭代的,这可能是一个潜在的方法(但实际 PHM 将会慢一些)。

0

评论者:odinodin

感谢您的跟进。您有什么想法或指导如何使用 clojure.spec 与 Datomic 实体一起使用?

0

评论者:alexmiller

目前,您可以使用into将一个实体倒入PHM中进行验证之前。我有点犹豫建议这样,但这可能还包括具有先导一致者的规范中。

0
by

评论者:alexmiller

暂时将其移至1.9,以免丢失。不过,不确定我们是否能或会实际处理这个问题。

0
by

评论者:alexmiller

这与CLJ-2080有关,因为它与{{map-of}}和{{every-kv}}实际上期望的有效输入有关,即:可以转化为map条目的东西。没有"ISeqsToMapEntries"(故意糟糕的名称)接口,我们无法为它编写一个谓词来表示这一点。java.util.Map、IPersistentMap等暗示了这一点,但一个对象可以转化为map条目,而不必满足那些更广接口的所有约束。ILookup不暗示这一点,也不应该暗示这一点。

0
by
参考: https://clojure.atlassian.net/browse/CLJ-2041(由halgari报告)
...