欢迎!有关此页面的更多信息,请参阅关于页面。
我想使用规范来验证 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 实体是序列可迭代的,这可能是一个潜在的路径(但对于实际的 PHMs来说可能会更慢)。
评论者:odinodin
感谢关注。那么,有没有任何想法或指导,如何使用 clojure.spec 与 Datomic 实体一起使用?
目前,您可以在验证之前使用 into 将实体倒入 PHM 中。我犹豫着提出这个建议,但它甚至可以在规范中包含一个起始验证器。
现在将此移入 1.9,以免丢失。不清楚我们是否能够或将要对此做些什么。
这与 CLJ-2080 有关,因为这是关于 {{map-of}} 和 {{every-kv}} 实际期望作为有效输入的相同基本问题,那就是:可以序列化为映射条目的东西。我们没有真正的界面 "ISeqsToMapEntries"(故意取了一个糟糕的名字)来表示这一点。java.util.Map、IPersistentMap 等。这意味着这,但一个对象可以序列化为映射条目而不满足那些范围更广的接口的所有约束。ILookup 不应该也不应该暗示这一点。