2024 Clojure 状态调查 中分享你的想法!

欢迎!请查看 关于 页面以获取有关如何使用本平台的更多信息。

+1 投票
用户头像 Spec

使用 Spec 1,似乎是 count 验证失败可以报告得更好 - 不清楚实际的统计数字是多少

user=> (s/assert (s/coll-of any? :count 1)
            [])
Execution error - invalid arguments to user/eval148 at (REPL:1).
[] - failed: (= 1 (count %))

1 个回答

0 投票
用户头像

:count 使用 bounded-count,在无限集合中可以正常工作。报告实际的统计数字将需要使用 count,这在无限集合上会导致挂起。

用户头像
这是一个公正的观察!然而,可以检测到情况是否容易处理,例如,该集合是否为向量?

这当然不是一般的解决方案,但它可以满足大量实际用例。
by
还有一些值得指出的事情
- 除了 `:count` 之外,还有其他限定条件
- 上面的“执行错误”实际上打印了值本身,所以很容易看到计数
- 这会导致无限集合中的挂起
- 意外的是,`explain-data` 在无限集合上也会挂起 - 我认为这是一个错误
by
谢谢,我感激这些观察。我不同意“[...] 实际上打印了值本身,所以很容易看到计数”。

对于人类来说,在向量中数42或1024个物品并不是一件容易的事情 :) spec解释应该在那里使我们生活更简单。
...