欢迎!有关如何工作的更多信息,请参阅关于 页面。
我想使用规约来验证 Datomic 实体。然而,s/keys 在这方面太严格了,因为它要求输入集合符合 clojure.core/map? 而不是某种更原始的接口(例如 clojure.lang.ILookup 或 clojure.lang.Associative)。
s/keys
clojure.core/map?
评论由:alexmiller 发表
s/keys 使用了 IPersistentMap 的 Iterable 支持来迭代所有条目以进行验证。ILookup 和 Associative 不支持迭代。这就是为什么它是这样的。但,了解这种需求。
Datomic 实体是可序列化的,这可能是一个潜在的方法(但对于实际的 PHM 来说会慢一些)。
评论由:odinodin 发表
感谢您的跟进。关于如何在使用 Datomic 实体时使用 clojure.spec 有任何想法或指导吗?
目前,您可以使用into将实休实体导入到PHM中以进行验证前。我犹豫你是否建议它,但它甚至可以在规范中与领先的符合者一起。
目前将它移至1.9只是为了不要丢失它。但不确定我们是否真的可以或会做任何事情。
这与CLJ-2080相关,因为它与{{map-of}}和{{every-kv}}实际预期为有效输入的内容是相同的基本问题,即:能够序列到映射条目。我们不实际创建一个谓词而没有接口"ISeqsToMapEntries"(故意取了个坏名字)来表示这一点。java.util.Map、IPersistentMap等暗示了这一点,但一个对象可以将其序列化到映射条目,而不必满足那些更广泛接口的所有约束。ILookup不可以,也不应该表示这一点。