欢迎!请查看 关于 页面了解更多本网站的工作方式。
我想使用 specs 验证 Datomic 实体。然而,s/keys requirement 太过严格,它要求输入的集合必须符合 clojure.core/map?,而不是一些更原始的接口(例如 clojure.lang.ILookup 或 clojure.lang.Associative)。
s/keys
clojure.core/map?
评论者:alexmiller
s/keys 使用了 IPersistentMap 的 Iterable 支持遍历所有条目进行验证。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不暗示这一点,也不应该暗示这一点。