欢迎!请参阅 关于 页面以了解更多信息。
我想使用 specs 验证 Datomic 实体。然而,s/keys 在这一点上过于严格,因为它要求输入集合符合 clojure.core/map?,而不是一些更原始的接口(例如 clojure.lang.ILookup 或 clojure.lang.Associative)。
s/keys
clojure.core/map?
评论者:alexmiller
s/keys 使用 IPersistentMap 的可迭代支持来遍历所有条目进行验证。ILookup 和 Associative 不支持迭代。所以这就是它的原因。但请理解这种需求。
Datomic 实体是可迭代的,这可能是一个潜在的方法(但实际 PHM 将会慢一些)。
评论者:odinodin
感谢您的跟进。您有什么想法或指导如何使用 clojure.spec 与 Datomic 实体一起使用?
目前,您可以使用into将一个实体倒入PHM中进行验证之前。我有点犹豫建议这样,但这可能还包括具有先导一致者的规范中。
暂时将其移至1.9,以免丢失。不过,不确定我们是否能或会实际处理这个问题。
这与CLJ-2080有关,因为它与{{map-of}}和{{every-kv}}实际上期望的有效输入有关,即:可以转化为map条目的东西。没有"ISeqsToMapEntries"(故意糟糕的名称)接口,我们无法为它编写一个谓词来表示这一点。java.util.Map、IPersistentMap等暗示了这一点,但一个对象可以转化为map条目,而不必满足那些更广接口的所有约束。ILookup不暗示这一点,也不应该暗示这一点。