2024 年 Clojure 调查问卷!中分享你的想法。

欢迎!请参阅关于页面以了解有关如何使用本站的一些更多信息。

0
Spec

我想使用 specs 验证 Datomic 实体。然而,s/keys 在此方面过于限制,它要求输入的集合必须符合 clojure.core/map? 而不是某种更原始的接口(例如 clojure.lang.ILookup 或 clojure.lang.Associative)。

7 个答案

0

评论者:alexmiller

s/keys 依赖于 IPersistentMap 的 Iterable 支持,用于遍历所有条目以进行验证。ILookup 和 Associative 不支持迭代。因此,这就是这种情况。但是,了解到这种需求。

0

评论者:alexmiller

Datomic 实体是可迭代的,这可能是一个潜在的途径(但对实际的 PHMs 会更慢)。

0

评论者:odinodin

感谢您的跟进。关于如何在使用 Datomic 实体时使用 clojure.spec,有没有什么想法或指导?

0

评论者:alexmiller

目前,您可以使用into将实体注入PHM中以进行验证。我犹豫是否推荐,但它甚至可以在规范中以先行符合者存在。

0

评论者:alexmiller

将此移至1.9,以免丢失。但不确定是否可以做点什么。

0

评论者:alexmiller

这与CLJ-2080相关,因为它与{{map-of}}和{{every-kv}}实际上期望的输入是同一基本问题,即是能够将序列转换为映射项的内容。如果我们没有“ISeqsToMapEntries”(故意起的坏名字)接口来表示这一点,我们实际上无法为其编写谓词。java.util.Map, IPersistentMap等隐含了这个,但一个对象可以序列为映射项而不满足那些非常广泛的接口的所有约束。ILookup不隐含这一点,也不应该隐含这一点。

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