欢迎!请参阅关于页面了解本网站的更多操作信息。
如果我运行
(s/conform (s/map-of (s/or :keyword keyword? :string string?) any?) {:a 1})
我得到
{:a 1}
而不是
{[:keyword :a] 1}
这是预期行为吗?
这个问题的后果之一是,如果我尝试s/unform
s/unform
(s/unform (s/map-of (s/or :keyword keyword? :string string?) any?) {:a 1})
我得到一个异常,因为:a不是s/or的有效适配值。
:a
s/or
我在使用spec-tools时遇到了这个问题。它实现的explain-data调用s/unform(https://github.com/metosin/spec-tools/blob/master/src/spec_tools/core.cljc#L446)。我正在尝试找出这是spec或spec-tools的问题。
explain-data
是的,这有几个原因导致这是默认行为:首先,映射键通常是简单值 - 关键词、字符串、长整型,适配值与键相同;其次,如果没有必要,这样做可以提高性能。
您可以通过:conform-keys true来请求此功能,但如果您需要它,如map-of文档字符串所述。请参阅此处。
:conform-keys true
map-of