clojure - Clojure 规范:地图?失败是因为规范认为我的数据结构是向量?
问题描述
我正在尝试验证 Spec 中的大型 clojure 数据结构。
我在这部分失败了:
{:pageName "HelloWorld" :pageType ::workPage :cells ["Hello World" "How are you?"]}
使用这个:
(s/def ::WorkPage (s/keys :req-un [::pageName ::pageType ::cells]))
此消息失败(来自说明)
{:pageName "HelloWorld", :pageType :assemblage.db/workPage, :cells ["Hello World" "How are you?"]} db.js:52:1
false db.js:54:1
-- Spec failed --------------------
[:pageName "HelloWorld"]
^^^^^^^^^^^^^^^^^^^^^^^^
should satisfy
map?
如果我在 repl 中单独运行上述规范,它就可以工作。
但是在上下文中(在 clojurescript 文件中),它看起来好像数据结构在被测试之前正在某个地方被转换为向量。
有没有人见过这样的事情?
会不会是在 ClojureScript 中这样做的结果?这是一些奇怪的javascript强制泄漏并咬我吗?
或者它可能是完全不同的东西?
解决方案
我相信这张地图的 Spec 定义:
{:pageName "HelloWorld" :pageType ::workPage :cells ["Hello World" "How are you?"]}
应该看起来像:
(s/def ::my-map (s/keys :req-un [::pageName ::pageType ::cells]))
可以像这样使用:
(s/valid? ::my-map {:pageName "HelloWorld" :pageType ::workPage :cells ["Hello World" "How are you?"]})
在您的帖子中 - 您在地图本身中获得了定义的关键,它可能会导致问题。
Spec 经常失败(至少在 JS 方面):
should satisfy map?
就像您以相同的名称注册更多规范密钥等时一样。
推荐阅读
- node.js - 在 .next/ 文件夹下提供静态文件,但 url 位置不同
- performance - 更新 MongoDB 中的批量数据
- azure-active-directory - 令牌中的无效受众声明用作令牌的 JSON Web 令牌 (JWT) 没有正确的受众。确保您使用的是正确的令牌
- sql - 结合 2 个表,每个表都有不同的数据
- python - Python 和 Snowflake 回滚不会在循环迭代内的特定条件下执行
- javascript - 如何防止科尔多瓦应用程序从后退按钮关闭 - Android
- java - 配置 `DataSource` 以使用 SSL/TLS 加密连接到 Digital Ocean 上的托管 Postgres 服务器
- java - 准备好的语句 ps.executeUpdate() 在负载下执行很慢
- javascript - TypeError 无法将 undefined 或 null 转换为对象
- windows - 证书存储在 Windows 证书存储区时如何解密信息